Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Problem mit Steuerzeichen in Textdatei und EOF

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Freiwilderer



Anmeldungsdatum: 09.04.2010
Beiträge: 3

BeitragVerfasst am: 09.04.2010, 09:04    Titel: Problem mit Steuerzeichen in Textdatei und EOF Antworten mit Zitat

Hallo,

ich hoffe, ich bin hier richtig, da ich mir nicht ganz sicher bin, dass es sich bei der programmiersprache um FreeBasic handelt happy ... 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
Benutzer-Profile anzeigen Private Nachricht senden
MOD
Fleißiger Referenzredakteur


Anmeldungsdatum: 10.09.2007
Beiträge: 1003

BeitragVerfasst am: 09.04.2010, 10:18    Titel: Antworten mit Zitat

Willkommen im Forum.

Vielleicht hilft dir dieser Referenzeintrag weiter: EOF
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Freiwilderer



Anmeldungsdatum: 09.04.2010
Beiträge: 3

BeitragVerfasst am: 09.04.2010, 10:46    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
MOD
Fleißiger Referenzredakteur


Anmeldungsdatum: 10.09.2007
Beiträge: 1003

BeitragVerfasst am: 09.04.2010, 10:57    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 09.04.2010, 11:16    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Freiwilderer



Anmeldungsdatum: 09.04.2010
Beiträge: 3

BeitragVerfasst am: 09.04.2010, 11:56    Titel: Antworten mit Zitat

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" zwinkern
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 09.04.2010, 12:24    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
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.

 Impressum :: Datenschutz