 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Freiwilderer
Anmeldungsdatum: 09.04.2010 Beiträge: 3
|
Verfasst am: 09.04.2010, 09:04 Titel: Problem mit Steuerzeichen in Textdatei und EOF |
|
|
Hallo,
ich hoffe, ich bin hier richtig, da ich mir nicht ganz sicher bin, dass es sich bei der programmiersprache um FreeBasic handelt ... aber ich glaube, im grunde ist die sprache für mein problem eher unwichtig.
Ich muss ein programm anpassen, welches Textdateien einließt, die folgendermaßen aufgebaut sind:
1005551 000000123456789test 190320112345INGOLF 0R 09:30
1005551 000000234567891test 190320112345INGOLF 0R 09:30
1005551 000000345678912test 190320112345INGOLF 0R 09:30
1005551 000000456789123test 190320112345INGOLF 07:3009:30
das problem ist nun, wenn ich sie über
Open "I", #70, AFilename
Do While Not EOF(70)
LINE INPUT #70, AE
.
.
.
LOOP
einlese, ist nach dem ersten Datensatz schon EOF erreicht.
Gibt es eine Möglichkeit die datei anders einzulesen, sodass die steuerzeichen quasi ignoriert werden?
mfg
Freiwilderer |
|
Nach oben |
|
 |
MOD Fleißiger Referenzredakteur

Anmeldungsdatum: 10.09.2007 Beiträge: 1003
|
Verfasst am: 09.04.2010, 10:18 Titel: |
|
|
Willkommen im Forum.
Vielleicht hilft dir dieser Referenzeintrag weiter: EOF |
|
Nach oben |
|
 |
Freiwilderer
Anmeldungsdatum: 09.04.2010 Beiträge: 3
|
Verfasst am: 09.04.2010, 10:46 Titel: |
|
|
hi
danke erstmal,
leider bringt mich das nich wirklich weiter, ich weiß ja, was eof ist, oder macht ... das problem ist nur, dass eines dieser steuerzeichen bewirkt, dass schon in der ersten zeile EOF auf true gesetzt wird.
# |
|
Nach oben |
|
 |
MOD Fleißiger Referenzredakteur

Anmeldungsdatum: 10.09.2007 Beiträge: 1003
|
Verfasst am: 09.04.2010, 10:57 Titel: |
|
|
Dann ermittel die Dateilänge mit LOF und les dann genau die Anzahl an Zeichen ein. Du musst halt die eingelesene Menge hochzählen und den Loop solange durchführen, bis die Länge der Datei erreicht ist. |
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
Verfasst am: 09.04.2010, 11:16 Titel: |
|
|
Hallo,
LINE INPUT kann mit Escape-Sequenzen in einzulesenden Dateien nicht umgehen. Sind solche Steuerzeichen in den Daten enthalten, muss stattdessen im BINARY-Modus gelesen werden.
Weißt du, ob der Zeilenumbruch in deiner Datei als Cr, Lf oder CrLf vorkommt?
Für das folgende Beispiel gehe ich von der Unix-/Linux-Variante Lf (Chr(10)) aus.
Code: | 'Zeilenweises Einlesen einer Datei, die Steuerzeichen enthaelt,
'sodass LINE INPUT nicht geeignet waere.
'Getestet mit FreeBASIC 0.20.0
Dim f As Integer
Dim Zeichen As String, Zeile As String
f = FreeFile
Zeichen = Space(1) 'Puffer mit 1 Byte Groesse
Zeile = ""
Open "myfile.dat" For Binary As #f
Do Until Eof(f)
Get #f,,Zeichen
If Zeichen = Chr(10) Then 'Zeilenumbruch (Linux-Format) erreicht.
'Die Zeile wurde komplett eingelesen. Jetzt kann die Variable
'"Zeile" verarbeitet werden:
Print Zeile 'Bisher "gesammelte" Zeichen der Zeile ausgeben
Zeile = "" 'und Zeilenpuffer wieder leeren
'(fuer die naechste Zeile).
Else 'Noch kein Zeilenumbruch. Daher ...
Zeile = Zeile + Zeichen '...Zeichen an Zeilenpuffer anhaengen
End If
Loop
Close #f 'Datei schliessen
If Zeile <> "" Then
'Die Datei enthielt am Ende noch Zeichen, aber keinen
'abschliessenden Zeilenumbruch. Den "Restpuffer" also noch
'beruecksichtigen:
Print Zeile
End If
Sleep |
Viele Grüße!
Sebastian _________________
Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen! |
|
Nach oben |
|
 |
Freiwilderer
Anmeldungsdatum: 09.04.2010 Beiträge: 3
|
Verfasst am: 09.04.2010, 11:56 Titel: |
|
|
Hi Sebastian,
es sind auf jeden fall zwei Zeichen, deswegen gehe ich eher von Cr, Lf (ein pfeil nach rechts und ein _| artiges zeichen)
vielen dank schonmal für eure hilfe, ich werde beide varianten ausprobieren, allerdings schaff ich das heute leider nicht mehr, werde mir das also nächste woche genauer anschauen, klingt aber vielversprechend, hatte mir schon gedacht, dass ich das dann anders einlesen muss.
das mit LOF hab ich schon kurz angetestet, wenn ich das durch 125 teile, sprich die anzahl der zeichen pro zeile, hab ich schonmal die richtige anzahl der zeilen. Habt mir sehr weiter geholfen.
Ich melde mich
mfg
edit:
was mir grad noch einfällt.
die Steuerzeichen sind im HexEditor ein 1a und 04, das is sicher aussagekräftiger als "pfeil" und "ein _| artiges zeichen"  |
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
Verfasst am: 09.04.2010, 12:24 Titel: |
|
|
Hallo,
mit Zeilenumbruch meinte ich das/die Steuerzeichen, das die Zeilen trennt/trennen und nicht die Spezialzeichen innerhalb der Datenzeilen.
Mein Codebeispiel kann auch Zeilen mit Sonderzeichen wie z.B. deinen &H1A &H04 einlesen, muss aber wissen, woran es erkennt, dass eine neue Zeile angefangen hat. In Textdateien unter Linux/Unix sorgt ein CHR(10) alias Lf für den Zeilenumbruch, unter Windows zwei Zeichen nämlich CHR(13,10) alias CrLf oder auch in Hexadezimalschreibweise 0D 0A.
Du könntest einen Teil deiner Datei mal als Beispiel irgendwo hochladen und hier verlinken. Dann würde ich meinen Code mal damit ausprobieren bzw. anpassen falls nötig. Aus der ersten Forennachricht kann man die Daten leider nicht exakt so herauskopieren, weil da z.B. die Zeilenumbruchzeichen zu HTML umgewandelt sind (<br>).
Viele Grüße!
Sebastian _________________
Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen! |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|