EOF() bei Textdateien [ERLEDIGT]
Moderator: Moderatoren
- Manfred
- Foren-Administrator
- Beiträge: 21200
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
EOF() bei Textdateien [ERLEDIGT]
Hi,
ich lese eine fremde Textdatei ein und arbeite sie Satz für Satz durch. Sobald ein EOF() kommt, ist der Vorgang beendet.
Das klappte auch prima, nur ist jetzt irgendwie ein EOF mittendrin reingekommen, welches ich aber nicht so direkt finde. Das Programm beendet dann und läuft nicht bis zum Ende durch. Ich behaupte jetzt, das es das ist.
Helft mir nochmals kurz auf die Sprünge, wonach ich suchen muß in der Textdatei. Also welche Zeichenfolge meine ich. Ich denke mal, es wird über eine Hexeditor laufen müssen?
ich lese eine fremde Textdatei ein und arbeite sie Satz für Satz durch. Sobald ein EOF() kommt, ist der Vorgang beendet.
Das klappte auch prima, nur ist jetzt irgendwie ein EOF mittendrin reingekommen, welches ich aber nicht so direkt finde. Das Programm beendet dann und läuft nicht bis zum Ende durch. Ich behaupte jetzt, das es das ist.
Helft mir nochmals kurz auf die Sprünge, wonach ich suchen muß in der Textdatei. Also welche Zeichenfolge meine ich. Ich denke mal, es wird über eine Hexeditor laufen müssen?
Zuletzt geändert von Manfred am Mo, 24. Nov 2008 14:34, insgesamt 1-mal geändert.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Rolf Ramacher
- Der Entwickler von "Deep Thought"
- Beiträge: 1930
- Registriert: Do, 09. Nov 2006 10:33
- Wohnort: Bergheim
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
Hallo Manfred,
hier ein Beispiel aus meinem Quellcode. aDes ist ein Array und beinhaltet mehrere Textdateien.
For x = 1 to Len(aDes)
cFile:=aDes[x][1]
cDatei:=memoread(cFile)
cDatei:=strtran(cDatei,";"," ;")
nZeile:=MLcount(cDatei,500)
For i = 1 to nZeile
cDatenSatz:=alltrim(MemoLine(cDatei,500,i))
cSchl:=Token(cDatenSatz,";",2)
If cSchl="DESADV"
Else
.........
Next i
Next x
hier ein Beispiel aus meinem Quellcode. aDes ist ein Array und beinhaltet mehrere Textdateien.
For x = 1 to Len(aDes)
cFile:=aDes[x][1]
cDatei:=memoread(cFile)
cDatei:=strtran(cDatei,";"," ;")
nZeile:=MLcount(cDatei,500)
For i = 1 to nZeile
cDatenSatz:=alltrim(MemoLine(cDatei,500,i))
cSchl:=Token(cDatenSatz,";",2)
If cSchl="DESADV"
Else
.........
Next i
Next x
- Manfred
- Foren-Administrator
- Beiträge: 21200
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Hi Rolf,
ich bin mir jetzt nicht so ganz sicher, ob Du mein Problem richtig verstanden hast. Ich suche das EOF() was irgendwo im TXT steht, welches den Abbruch der Schleife verursacht. Habe aber im Moment irgendwie nicht den genauen Plan, was ich da suchen muß. Die Textdatei hat einen LASTREC() von 518 geht aber nur bis 400 und bricht dann ab.
ich bin mir jetzt nicht so ganz sicher, ob Du mein Problem richtig verstanden hast. Ich suche das EOF() was irgendwo im TXT steht, welches den Abbruch der Schleife verursacht. Habe aber im Moment irgendwie nicht den genauen Plan, was ich da suchen muß. Die Textdatei hat einen LASTREC() von 518 geht aber nur bis 400 und bricht dann ab.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Manfred
- Foren-Administrator
- Beiträge: 21200
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Jetzt ist mir noch etwas aufgefallen. Sobald der Satzzeiger auf der Recno() 402 steht, springt er beim nächsten Skip() auf EOF() und das obwohl laut LASTREC() 512 Sätze vorhanden sein sollen.
Was will mir das sagen?
Was will mir das sagen?
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Manfred
- Foren-Administrator
- Beiträge: 21200
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Noch etwas entdeckt.
In einer älteren Programmversion klappt es. Der Unterschied zwischen den beiden Programmen ist, dass ich in der älteren Version alles von Hand einzeln abfrage, sprich ich prüfe auf ASC(cFeld) <> 13. Bei der neueren Version benutze ich DELDBE
und mache einfach nur ein:
Do WHILE ! (nArea)->(EOF())
(nArea)->(dbskip())
ENDDO
In einer älteren Programmversion klappt es. Der Unterschied zwischen den beiden Programmen ist, dass ich in der älteren Version alles von Hand einzeln abfrage, sprich ich prüfe auf ASC(cFeld) <> 13. Bei der neueren Version benutze ich DELDBE
Code: Alles auswählen
cDbeStd := DBESETDEFAULT("deldbe")
DBEINFO(COMPONENT_DATA, DELDBE_FIELD_TOKEN, CHR(9)) // Tabzeichen dient als Feldtrenner
DBEINFO(COMPONENT_DATA, DELDBE_DELIMITER_TOKEN, Chr(0) ) //
DBEINFO(COMPONENT_DATA, DELDBE_MAX_BUFFERSIZE, 128*1024)
DBEINFO(COMPONENT_DATA, DELDBE_DECIMAL_TOKEN, ",") // Währungen werden mit Komma getrennt
DbeInfo(COMPONENT_DATA, DBE_EXTENSION,"") // jetzt akzeptiert sie auch KEINE Extension!?
// 1 2
// 12345678901234567890123456
// DBEINFO(COMPONENT_DATA, DELDBE_FIELD_TYPES, "NCCNNCNCCCCCNCCNNCCCCCC")
DBEINFO(COMPONENT_DATA, DELDBE_FIELD_TYPES, "CCNCNCCCNNNNCNCCCCCCCCCCCN")
USE ..\datenbanken\amazon\rueckmeldung\catalog-generic-EXPORT VIA DELDBE NEW EXCLUSIVE
DBESETDEFAULT(cDbeStd)
nArea := SELECT()
Do WHILE ! (nArea)->(EOF())
(nArea)->(dbskip())
ENDDO
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Martin Altmann
- Foren-Administrator
- Beiträge: 16517
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Manfred,
öffne mal die Datei in einem Texteditor und ersetze den Tab durch den Tab (im gesamten Text).
Wie oft wurde ersetzt?
Ist die Anzahl glatt durch 512 (die Anzahl an Datensätzen) teilbar?
Worin unterscheiden sich die Zeilen 402 und 403 (bezogen auf den Aufbau)? Ist die Zeile 402 oder 403 sehr lang?
Viele Grüße,
Martin
öffne mal die Datei in einem Texteditor und ersetze den Tab durch den Tab (im gesamten Text).
Wie oft wurde ersetzt?
Ist die Anzahl glatt durch 512 (die Anzahl an Datensätzen) teilbar?
Worin unterscheiden sich die Zeilen 402 und 403 (bezogen auf den Aufbau)? Ist die Zeile 402 oder 403 sehr lang?
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
- Manfred
- Foren-Administrator
- Beiträge: 21200
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Hi Martin,
eben kurz geantwortet: Ich habe ab der "Fehlerzeile" 3 Zeilen entfernt und dann läuft es. Das kann es aber nicht sein.
Ich werde mich gleich um Deinen Vorschlag kümmern, muß nur eben die Gunst der Stunde nutzen und Rasen mähen.
Bis später.....
eben kurz geantwortet: Ich habe ab der "Fehlerzeile" 3 Zeilen entfernt und dann läuft es. Das kann es aber nicht sein.
Ich werde mich gleich um Deinen Vorschlag kümmern, muß nur eben die Gunst der Stunde nutzen und Rasen mähen.
Bis später.....
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Martin Altmann
- Foren-Administrator
- Beiträge: 16517
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Hallo Manfred,
doch - dann ist nämlich innerhalb der drei Zeilen ein Fehler, z.B. ein Tab zu viel (als Text in einem Feldinhalt) oder eine der Zeilen ist zu lang (Du hast ja eine Obergrenze definiert)...
Viele Grüße,
Martin
doch - dann ist nämlich innerhalb der drei Zeilen ein Fehler, z.B. ein Tab zu viel (als Text in einem Feldinhalt) oder eine der Zeilen ist zu lang (Du hast ja eine Obergrenze definiert)...
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
- Manfred
- Foren-Administrator
- Beiträge: 21200
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Hi Martin,
hm, das wäre schon denkbar, aber wie soll ich das herausfinden? Ich habe die Textdatei in eine Tabellenkalkulation eingelesen mit TAB als Trenner, da sind aber alle Zeilen schön senkrecht passend untereinander. Jedenfalls kann ich da so nichts finden.
hm, das wäre schon denkbar, aber wie soll ich das herausfinden? Ich habe die Textdatei in eine Tabellenkalkulation eingelesen mit TAB als Trenner, da sind aber alle Zeilen schön senkrecht passend untereinander. Jedenfalls kann ich da so nichts finden.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Martin Altmann
- Foren-Administrator
- Beiträge: 16517
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Hallo Manfred,
öffne die Datei in einem normalen Editor und mache dort ein Suchen und Ersetzen...
Viele Grüße,
Martin
öffne die Datei in einem normalen Editor und mache dort ein Suchen und Ersetzen...
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
- Manfred
- Foren-Administrator
- Beiträge: 21200
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Fehler gefunden......
Es befand sich ein Sonderzeichen im Namen. Und das hat zu diesem merkwürdigen Verhalten geführt. Im Texteditor war es ein Quadrat. Das ist natürlich verdammt übel. Wie soll man sowas abfangen? Für die Datenprüfung während der Eingabe in die Textdatei bin ich nicht zuständig, das erledigt Amazon, oder auch nicht....
Es befand sich ein Sonderzeichen im Namen. Und das hat zu diesem merkwürdigen Verhalten geführt. Im Texteditor war es ein Quadrat. Das ist natürlich verdammt übel. Wie soll man sowas abfangen? Für die Datenprüfung während der Eingabe in die Textdatei bin ich nicht zuständig, das erledigt Amazon, oder auch nicht....
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- AUGE_OHR
- Marvin
- Beiträge: 12909
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: EOF() bei Textdateien
hi,
auf jeden Fall müsste "die" Datei ja "kürzer" als das original sein ?
nPosi := (Original - NeueDatei) müsste dann auch gleich die Position sein
wo dein EOF steht.
gruss by OHR
Jimmy
wenn du meist das mittendrin ein EOF ist könnte es auch ein CRTL-Z sein.Manfred hat geschrieben: ich lese eine fremde Textdatei ein und arbeite sie Satz für Satz durch. Sobald ein EOF() kommt, ist der Vorgang beendet.
Helft mir nochmals kurz auf die Sprünge, wonach ich suchen muß in der Textdatei. Also welche Zeichenfolge meine ich. Ich denke mal, es wird über eine Hexeditor laufen müssen?
auf jeden Fall müsste "die" Datei ja "kürzer" als das original sein ?
nPosi := (Original - NeueDatei) müsste dann auch gleich die Position sein
wo dein EOF steht.
gruss by OHR
Jimmy
- Manfred
- Foren-Administrator
- Beiträge: 21200
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Hi,
so, nachdem ich mir im Hexeditor einmal das Zeichen angesehen habe, scheint es ein C3 zu sein. Umgerechnet ist es dann 195 und ergibt ein "A" mit einer Tilde drüber. Ich werde jetzt einmal bei Alaska nachfragen, was dieses Zeichen warum bewirkt.
so, nachdem ich mir im Hexeditor einmal das Zeichen angesehen habe, scheint es ein C3 zu sein. Umgerechnet ist es dann 195 und ergibt ein "A" mit einer Tilde drüber. Ich werde jetzt einmal bei Alaska nachfragen, was dieses Zeichen warum bewirkt.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- brandelh
- Foren-Moderator
- Beiträge: 15697
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Hi,
ein Text-EOF Zeichen ist chr(26) - memowrit() setzt ein solches immer ans Dateiende und NotePad zeigt es als kleines Kästchen an, wobei auch chr(0) als Zeilenende Probleme machen kann.
Die DELDBE hat zudem das Problem, dass die Datei eine feste Satzlänge braucht und man auch noch die Felddefinitionen liefern muss.
Ich lade Textdateien in den Speicher und nutze die substr() Funktion um einzelne Zeilen zu verarbeiten. MLCount und Memoline kann man bei kleinen Texten auch nutzen (über 1000 Zeilen wird es damit zäh).
ein Text-EOF Zeichen ist chr(26) - memowrit() setzt ein solches immer ans Dateiende und NotePad zeigt es als kleines Kästchen an, wobei auch chr(0) als Zeilenende Probleme machen kann.
Die DELDBE hat zudem das Problem, dass die Datei eine feste Satzlänge braucht und man auch noch die Felddefinitionen liefern muss.
Ich lade Textdateien in den Speicher und nutze die substr() Funktion um einzelne Zeilen zu verarbeiten. MLCount und Memoline kann man bei kleinen Texten auch nutzen (über 1000 Zeilen wird es damit zäh).
Gruß
Hubert
Hubert
- Manfred
- Foren-Administrator
- Beiträge: 21200
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Hi Hubert,
das Zeichen ist mittendrin und verursacht den Murks. Sobald es entfernt, bzw. gegen ein legales ausgetauscht wird, klappt es prima. Bisher habe ich noch keine Antwort von Alaska. Mal sehen ob und was die schreiben...
das Zeichen ist mittendrin und verursacht den Murks. Sobald es entfernt, bzw. gegen ein legales ausgetauscht wird, klappt es prima. Bisher habe ich noch keine Antwort von Alaska. Mal sehen ob und was die schreiben...
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- brandelh
- Foren-Moderator
- Beiträge: 15697
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Hallo Manfred,
das Zeichen könnte auch zurecht dort sein !
Festplatten sind ja in Sektoren mit fixer Länge unterteilt und eine Textdatei hat keinen Header der die Länge festlegt. Daher haben früher Textprogramme das chr(26) gesetzt um zu erkennen wo der richtige Text aufhört und der Schrott (Füllbytes aus Blockgröße) anfängt.
Notepad etc. machen das heute anders, daher auch die seltsame Anzeige des Kästchens. Alaska kann dir nicht sagen woher deine Datei dieses Zeichen hat. Memowrit() wie gesagt setzt es am Ende ...
das Zeichen könnte auch zurecht dort sein !
Festplatten sind ja in Sektoren mit fixer Länge unterteilt und eine Textdatei hat keinen Header der die Länge festlegt. Daher haben früher Textprogramme das chr(26) gesetzt um zu erkennen wo der richtige Text aufhört und der Schrott (Füllbytes aus Blockgröße) anfängt.
Notepad etc. machen das heute anders, daher auch die seltsame Anzeige des Kästchens. Alaska kann dir nicht sagen woher deine Datei dieses Zeichen hat. Memowrit() wie gesagt setzt es am Ende ...
Gruß
Hubert
Hubert
- Manfred
- Foren-Administrator
- Beiträge: 21200
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Hi Hubert,
das Zeichen gehört definitiv nicht dahin, bzw. scheint eine Fehleingabe des Users zu sein, die nicht abgefangen wird vom Programm. Ich möchte auch von Alaska nicht wissen, warum das Zeichen da steht, sondern warum die DELDBE darauf so reagiert.
das Zeichen gehört definitiv nicht dahin, bzw. scheint eine Fehleingabe des Users zu sein, die nicht abgefangen wird vom Programm. Ich möchte auch von Alaska nicht wissen, warum das Zeichen da steht, sondern warum die DELDBE darauf so reagiert.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- urbi
- Rekursionen-Architekt
- Beiträge: 142
- Registriert: So, 26. Mär 2006 18:47
- Wohnort: 76185 Karlsruhe
- Kontaktdaten:
Hallo Manfred,
ich nutze in einem solchen Fall immer Lowlevel Funktionen:
ist schnell und flexibel, und Fehler werden gezeigt
Gruss Rainer
ich nutze in einem solchen Fall immer Lowlevel Funktionen:
Code: Alles auswählen
Handle := FOPEN(spfad+"\INVEXPO.TXT")
cString := SPACE(256)
FREAD(Handle,@cstring,256) // maximale Zeilenlänge
nOffset := 0
BSAVEERROR := ERRORBLOCK()
DO WHILE noffset < (nbytes-10)
BEGIN SEQUENCE
ERRORBLOCK( {|e| BREAK(e)} )
OPROGRESS:INCREMENT(i)
noffset += AT(CHR(13),cstring)
cText := SUBSTR(cString,1,AT(CHR(13),cstring)-1)
aData := {}
TOKENINIT(@cText,";",1)
WHILE !TOKENEND()
AADD(aData,TOKENNEXT())
ENDDO
IF !EMPTY(adata[1])
//
// Daten verarbeiten
//
ENDIF
RECOVER USING oError
ERRORBLOCK( bSaveError )
cMessage := "Fehler: "
IF Valtype( oError:description ) == "C"
cMessage += oError:description+ " "
ENDIF
IF ! Empty( oError:operation )
cMessage += oError:operation
ENDIF
ERRORBLOCK( bSaveError )
IF CONFIRMBOX(oFDLG,"Datensatz Artikel [ "+LEFT(cText,30)+" ] ist fehlerhaft!"+CHR(10)+CHR(10);
+ cMessage+ CHR(10)+CHR(10);
+"überprüfen und korrigieren Sie den Datensatz!"+CHR(10)+CHR(10);
+"oder brechen sie den Import ab.";
,"Fehler bei Invenur neu",XBPMB_OKCANCEL ,XBPMB_CRITICAL+XBPMB_APPMODAL)= XBPMB_RET_CANCEL
EXIT
ENDIF
ERRORBLOCK( {|e| BREAK(e)} )
END SEQUENCE
ERRORBLOCK( bSaveError )
FSEEK(Handle,noffset)
FREAD(Handle,@cstring,256)
i ++
ENDDO
FCLOSE(handle)
ist schnell und flexibel, und Fehler werden gezeigt
Gruss Rainer
urbi
- Manfred
- Foren-Administrator
- Beiträge: 21200
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Hi Rainer,
sowas ähnliches hatte ich anfangs auch. Ich habe jede Zeile Zeichen für Zeichen "gescannt". Ich habe aber durch die DELDBE etliches an Arbeit abgenommen bekommen. Ich denke auch einmal, dass es bei größeren Dateien schneller ist, als das Zeichen für Zeichen prüfen. Zumal noch etliche Tauschvorgänge (aus der Textdatei Spalten extrahieren und dann in eine DBF schreiben) hinzukommen, die auch noch geprüft werden wollen. Das erledigt jetzt die DELDBE für mich.
sowas ähnliches hatte ich anfangs auch. Ich habe jede Zeile Zeichen für Zeichen "gescannt". Ich habe aber durch die DELDBE etliches an Arbeit abgenommen bekommen. Ich denke auch einmal, dass es bei größeren Dateien schneller ist, als das Zeichen für Zeichen prüfen. Zumal noch etliche Tauschvorgänge (aus der Textdatei Spalten extrahieren und dann in eine DBF schreiben) hinzukommen, die auch noch geprüft werden wollen. Das erledigt jetzt die DELDBE für mich.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- brandelh
- Foren-Moderator
- Beiträge: 15697
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Hi,
Ctrl+Z erzeugt das Zeichen wenn ich recht weiß.
Die DELDBF macht nix anderes als das Standardende einer Textdatei zu erkennen. Ich tausche solche Zeichen bei meinen Textdateien vorher aus:
ich meine ich hätte Str2Disk() und File2STr() in der Wissensdatenbank veröffentlicht. Die XbToolsIII haben ähnliche Funktionen FileStr() und StrFile()
Ctrl+Z erzeugt das Zeichen wenn ich recht weiß.
Die DELDBF macht nix anderes als das Standardende einer Textdatei zu erkennen. Ich tausche solche Zeichen bei meinen Textdateien vorher aus:
Code: Alles auswählen
cTxt := File2Str(...)
cTxt := strtran(cTxt,chr(0)," ") // oder "" für Löschen
cTxt := strtran(cTxt,chr(26)," ") // oder "" für Löschen
...
Str2Disk(...,cTxt) // memowrit() nicht nutzen !
Gruß
Hubert
Hubert
- Manfred
- Foren-Administrator
- Beiträge: 21200
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Hi Hubert,
CTRL+Z könnte das Zeichen sein, was bei mir Ärger macht?
Nun, wenn dem so ist, dann muß ich schweren Herzens eben vorher einen Durchlauf machen und es entfernen, wobei mir aber dann die DELDBE nichts mehr nutzt. Wenn ich nämlich erst einen Prüflauf machen muß, dann kann ich auch gleich dabei alles andere erledigen. Das ist aber m.E. nicht Sinn und Zweck der Sache. Sowas kann doch bei Textdateien immer wieder passieren. Naja, warten wir mal ab, was von der Eisregion geantwortet wird.
CTRL+Z könnte das Zeichen sein, was bei mir Ärger macht?
Nun, wenn dem so ist, dann muß ich schweren Herzens eben vorher einen Durchlauf machen und es entfernen, wobei mir aber dann die DELDBE nichts mehr nutzt. Wenn ich nämlich erst einen Prüflauf machen muß, dann kann ich auch gleich dabei alles andere erledigen. Das ist aber m.E. nicht Sinn und Zweck der Sache. Sowas kann doch bei Textdateien immer wieder passieren. Naja, warten wir mal ab, was von der Eisregion geantwortet wird.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Manfred
- Foren-Administrator
- Beiträge: 21200
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
ja nun,
ich habe den Quelltext jetzt nicht mehr zur Hand, aber es ging darum:
1) Öffnen
2) Gucken, wo die Spalten anfangen und aufhören
3) umkopieren in Datenbank
4) Datensatzende suchen
5) nächsten Satz anfangen
6) usw.
7) Dateiende.
Mag sein,. dass ich es mal wieder kompliziert programmiert habe, aber ich habe es mit FREADSTR() immer zeichenweise eingelesen.
Ich muß mal schauen, ob ich noch irgendwo eine Kopie liegen habe, vielleicht wird das ja dann mal wieder ein erquickliches Thema für die Vermeidung von Wurstprogrammen.....
ich habe den Quelltext jetzt nicht mehr zur Hand, aber es ging darum:
1) Öffnen
2) Gucken, wo die Spalten anfangen und aufhören
3) umkopieren in Datenbank
4) Datensatzende suchen
5) nächsten Satz anfangen
6) usw.
7) Dateiende.
Mag sein,. dass ich es mal wieder kompliziert programmiert habe, aber ich habe es mit FREADSTR() immer zeichenweise eingelesen.
Ich muß mal schauen, ob ich noch irgendwo eine Kopie liegen habe, vielleicht wird das ja dann mal wieder ein erquickliches Thema für die Vermeidung von Wurstprogrammen.....
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Martin Altmann
- Foren-Administrator
- Beiträge: 16517
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Hallo Manfred,
Hubert schlug ja auch vor, Datei A zu lesen, die "Sonderzeichen" per Strtran() zu ersetzen, das ganze in Datei B zu schreiben.
Und nun kommst Du mit Deiner bisherigen Verarbeitung per DELDBE - allerdings auf Datei B!
Viele Grüße,
Martin
Hubert schlug ja auch vor, Datei A zu lesen, die "Sonderzeichen" per Strtran() zu ersetzen, das ganze in Datei B zu schreiben.
Und nun kommst Du mit Deiner bisherigen Verarbeitung per DELDBE - allerdings auf Datei B!
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.