Frage zu Readline
Übersicht

tipfehlerBetreff: Frage zu Readline |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
seekfile damit kannst du die position in der datei festlegen ab der gelsen werden soll. | ||
![]() |
DivineDominion |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Lese doch einfach deine Config Datei Zeilenweise in ein Array
und dann kannste die Zeilen schnell anspringen . |
||
tipfehler |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
So hatte ich das eh vor ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke!! Hab ich vollig übersehen ![]() |
||
![]() |
4pac |
![]() Antworten mit Zitat ![]() |
---|---|---|
Kein Problem ![]() ![]() Grüße, Thomas |
||
tipfehler |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Schon klar ![]() 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 ![]() 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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
danke ich werds gleich probieren ![]() |
||
tipfehler |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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" ![]() ![]() |
||
![]() |
wunderkind |
![]() Antworten mit Zitat ![]() |
---|---|---|
Doch, kann man. Aber du kannst sie nur global, also außerhalb einer Funktion definieren. | ||
tipfehler |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
mm das ist ja doof, dann kann ich ja meine Funktion gar nicht allgemeingültig verwenden ![]() |
||
Timo |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
aso, hatte dich falsch verstanden... joa da ist dann wohl Dim besser ![]() |
||
tipfehler |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Mist ihr hattet doch recht ![]() ![]() Code: [AUSKLAPPEN] Type irgendwas Field iregendwaswas end Type auch Systemresourcen?? |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group