Frage zu Readline

Übersicht BlitzBasic Allgemein

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

 

tipfehler

Betreff: Frage zu Readline

BeitragDo, Aug 19, 2004 15:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich möchte über Readline immer bestimmte Zeilen aus einer Textdatei auslesen. Ist es möglich auch direkt eine Zeile anzugeben um diese auszulesen, denn diese Mehtode scheint mir sehr umständlich:

Code: [AUSKLAPPEN]

Function AUSLESEN(Zeile)

   Zeile = Zeile - 1

   InputStream   = ReadFile("Config.txt")
   
      For i = 0 To Zeile
         ascii = ReadLine(InputStream)
      Next
      
   CloseFile InputStream
   Return ascii

End Function

dominik

BeitragDo, Aug 19, 2004 15:34
Antworten mit Zitat
Benutzer-Profile anzeigen
seekfile damit kannst du die position in der datei festlegen ab der gelsen werden soll.

DivineDominion

BeitragDo, Aug 19, 2004 15:44
Antworten mit Zitat
Benutzer-Profile anzeigen
SeekFile taugt so nix... er müsste die Position in der Datei kennen. Nicht die Zeile spielt dabei eine Rolle sondern das Byte in der Datei. Und weil eine Zeile unterschiedlich lang ist - schwierig. Er könnte lediglich einmal alle Zeilen einlesen, die größe in Bytes in ein Array speichern ( Dim Zeilengroesse( Zeilenanzahl ) ) und dann die entsprechende Position berechnen indem er alle Zeilengrößen bis "Zeile-1" addiert.

Zum rausfinden der Zeilenanzahl ist, um der Frage vorzubeugen, ein weiterer Durchlauf der gesamten datei fällig, nur diesmal mit EOF() und einem Zeilenzähler
christian.tietze@gmail.com - https://christiantietze.de
macOS
 

tipfehler

BeitragDo, Aug 19, 2004 17:16
Antworten mit Zitat
Benutzer-Profile anzeigen
mm dann könnte man die Zeilen immer mit Leerzeichen auf eine bestimmte länge bringen, um seekfile zu verwenden, aber ist das besser?
 

Blitzkrieg Bop

BeitragDo, Aug 19, 2004 17:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Warum Seekfile? Soweit ich das verstanden habe, sollte das schnell geproggte hier, auch gehen!
Code: [AUSKLAPPEN]

Graphics 640,480

datei$ = Input("Dateinamen: ")
zeile = Input("In welche Zeile soll geucht werden?: ")

file = OpenFile(datei$)
While Not Eof(file)
   ReadLine file : zeilen = zeilen + 1
   If zeilen = zeile-1
      satz$ = ReadLine(file)
      RuntimeError "In Zeile Nr.: "+zeile+" steht: "+"'"+satz$+"'"
   EndIf          
Wend
~ Hey Ho Let's Go ~

Markus2

BeitragDo, Aug 19, 2004 18:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Lese doch einfach deine Config Datei Zeilenweise in ein Array
und dann kannste die Zeilen schnell anspringen .
 

tipfehler

BeitragDo, Aug 19, 2004 22:08
Antworten mit Zitat
Benutzer-Profile anzeigen
So hatte ich das eh vor Smile Jetzt hab ich aber ein ganz anderes Problem, denn wenn ich versuche mit folgendem Code Text(keine Zahlen) aus einer Datei auszulesen, dann spuckt er mir immer nur 0 aus.

Code: [AUSKLAPPEN]

Function ZEILEAUSLESEN(Dateiname$, Zeile)

   Local Inhalt$

   InputStream   = ReadFile(Dateiname$)
   
      While Not Eof(InputStream)
       i = i + 1
            Inhalt$ = ReadLine$(InputStream)
       If i = Zeile Then Exit
      Wend 
     
   CloseFile InputStream
   Return Inhalt$

End Function

4pac

BeitragDo, Aug 19, 2004 22:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Die Function muss heißen

Code: [AUSKLAPPEN]
Function ZEILEAUSLESEN$(Dateiname$, Zeile)


beachte das $-Zeichen am Ende des Function-Namens. Ich glaube, das müsste es sein.

Grüße,
Thomas
 

tipfehler

BeitragDo, Aug 19, 2004 22:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke!! Hab ich vollig übersehen Embarassed

4pac

BeitragSa, Aug 21, 2004 3:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Kein Problem Smile Hauptsache Du weißt, WARUM das $-Zeichen dort stehen muss Wink wenn die Function einen String ($) zurückgeben soll, musst Du ihr halt bereits in der Definition beim Namen ein $-Zeichen hintenanstellen. Sonst gibt sie Dir für Strings 0 als Wert zurück, weil sie Zahlenwerte erwartet.

Grüße,
Thomas
 

tipfehler

BeitragSa, Aug 21, 2004 12:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Schon klar Wink Jetzt hab ich aber ein ganz anderes Problem. Ich hab mich drangesetzt, eine Funktion zu schreiben mit welcher ich eine beliebige Zeile in einem Text verändern kann. Erst hab ich es so probiert:



Code: [AUSKLAPPEN]

   ;Bis zur gewünschten Zeile vorarbeiten
   While Not Eof(OutputStream)
      i = i + 1
      If i = Zeile Then Exit
            ReadLine(OutputStream)
   Wend

   ;Die gewünschte Zeile ersetzen
   WriteLine OutputStream, Inhalt$


Nur dann hängt er mir den Text immer am Ende der Zeile an, welche er eigentlich ersetzen sollte. Und bei der Methode ist fast das selbe, nur das er mir die gewünschte Zeile an die vorherige anhängt Sad

Code: [AUSKLAPPEN]

      ;Gewünschte Zeile einlesen
      While Not Eof(InputStream)
       i = i + 1
            Inhalt$ = ReadLine(InputStream)
         Laenge = Laenge + Len(Inhalt$)
       If i = Zeile Then Exit
      Wend 

   ;Position für den Beginn von WriteLine festlegen
   Laenge_temp = Len(Inhalt$)
   Pos = Laenge - Laenge_temp
   Position = SeekFile(OutputStream, Pos)

   ;Die gewünschte Zeile ersetzen
   WriteLine OutputStream, Inhalt$


Wie könnte ich es am besten umsetzen eine gewünschte Zeile in einem Text zu ersetzen, bzw wo liegt mein Fehler oben?
 

sdjh

BeitragSa, Aug 21, 2004 19:41
Antworten mit Zitat
Benutzer-Profile anzeigen
wenn du die zeilennummer kennst, dann brauchts du einfach nur alle zeilen bis zu der linie davor lesen und die danach schreiben.
allerdings müssen alle nachfolgenden zeilen in einen type/dim gespeichern sein, da alle nachfolgenden zeilen gelöscht werden. Und du musst OpenFile nutzen.

Oder, was einfacher ist, einfach alle Zeilen auslesen und sie nachher neu schreiben.

Code: [AUSKLAPPEN]

type linie
field l$
end type

file=openfile("myfile.dat")
liniezumersetzen=8
x=1
repeat
l.linie=new linie
l\l$=readline(file)
if x=liniezumersetzen
l\l$="Neuer Text"
endif

seekfile(file,0)
for l.linie=each linie
writeline(file,l\l$)
next
until eof(file)


hab den quelltext nicht getestet, sollte aber zumindest den gedankengang veranschaulichen ^^
 

tipfehler

BeitragSa, Aug 21, 2004 20:42
Antworten mit Zitat
Benutzer-Profile anzeigen
danke ich werds gleich probieren Smile
 

tipfehler

BeitragSa, Aug 21, 2004 21:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Na toll ich hab meine Funktion in Mühevollster kleinarbeit auf Types umgeschrieben, freu mich schon auf das endprodukt, doch als ich auf kompilieren drücke, sagt er mir "'Type' can only appear in main program" Evil or Very Mad Very Happy Kann man Types nicht in Funktionen verwenden?

wunderkind

BeitragSa, Aug 21, 2004 21:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Doch, kann man. Aber du kannst sie nur global, also außerhalb einer Funktion definieren.
 

tipfehler

BeitragSa, Aug 21, 2004 21:31
Antworten mit Zitat
Benutzer-Profile anzeigen
mm das ist ja doof, dann kann ich ja meine Funktion gar nicht allgemeingültig verwenden Sad dann mach ichs mit Dim....
 

Timo

BeitragSa, Aug 21, 2004 21:38
Antworten mit Zitat
Benutzer-Profile anzeigen
sicher geht das, du darfst nur nicht ein Type in einer Funktion deklarieren

Code: [AUSKLAPPEN]
;so nicht!
function machwas()
  Type hallo
    Field counter
  end Type
  ...blablabla
end function


sondern
Code: [AUSKLAPPEN]
Type hallo
  Field counter
end Type

Function machwas()
 ...blablabla
End function
 

tipfehler

BeitragSa, Aug 21, 2004 21:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Ist schon klar, aber wenn ich eine allgemeingültige Funktion schreiben will, dann will ich vorher doch nicht vorher immer die Types deklarieren müssen.
Mit Dim[Zahl] gehts genauso
 

Timo

BeitragSa, Aug 21, 2004 21:48
Antworten mit Zitat
Benutzer-Profile anzeigen
aso, hatte dich falsch verstanden... joa da ist dann wohl Dim besser Smile
 

tipfehler

BeitragSa, Aug 21, 2004 22:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Mist ihr hattet doch recht Embarassed Types ist besser, da man variable[irgendwas] nicht Dynamisch benutzen kann. Da bleibt mir wohl nichts übrig als doch eine Globale Deklaration zu setzen. Sad Belegt die Deklaration, als zB

Code: [AUSKLAPPEN]

Type irgendwas
  Field iregendwaswas
end Type


auch Systemresourcen??

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group