MemoRead() <-> LowLevel Funktionen [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
MemoRead() <-> LowLevel Funktionen [ERLEDIGT]
Moin,
ich glaube ich falle um. Ich habe mir gerade aus einem dummen Zufall heraus die MemoRead() usw. Funktionen angesehen. Ich vermute einmal, ich habe die vom Namen her die ganze Zeit falsch eingestuft. Damit lese ich Inhalte von Textdateien ein, verarbeite sie und speichere sie, alles nur wesentlich komfortabler als wenn ich das mit den Fopen() usw. Funktionen mache?
Was habe ich mir denn die ganze Zeit für eine Arbeit gemacht?
Na gut, kommen wir zu meinem Problem:
Ich habe eine Textdatei, die recht groß werden kann. Am Anfang dieser Textdatei stehen immer 2 Zeilen, die nicht übernommen werden dürfen, bzw.die die weitere Verarbeitung mit der DELDBE durcheinanderwürfeln. Also müssen die raus.
Jetzt wollte ich eigentlich die Textdatei auf LowLevel Format öffnen, diese besagten 2 Zeilen entfernen, dann wieder zurückschreiben, schließen und dann mit der DELDBE Engine öffnen um dann Satz für Satz mit Skip diese zu durchlaufen.
Ich tue mich aber etwas schwer damit, diese beiden Zeilen mit einer vernünftigen Lösung zu entfernen.
ich glaube ich falle um. Ich habe mir gerade aus einem dummen Zufall heraus die MemoRead() usw. Funktionen angesehen. Ich vermute einmal, ich habe die vom Namen her die ganze Zeit falsch eingestuft. Damit lese ich Inhalte von Textdateien ein, verarbeite sie und speichere sie, alles nur wesentlich komfortabler als wenn ich das mit den Fopen() usw. Funktionen mache?
Was habe ich mir denn die ganze Zeit für eine Arbeit gemacht?
Na gut, kommen wir zu meinem Problem:
Ich habe eine Textdatei, die recht groß werden kann. Am Anfang dieser Textdatei stehen immer 2 Zeilen, die nicht übernommen werden dürfen, bzw.die die weitere Verarbeitung mit der DELDBE durcheinanderwürfeln. Also müssen die raus.
Jetzt wollte ich eigentlich die Textdatei auf LowLevel Format öffnen, diese besagten 2 Zeilen entfernen, dann wieder zurückschreiben, schließen und dann mit der DELDBE Engine öffnen um dann Satz für Satz mit Skip diese zu durchlaufen.
Ich tue mich aber etwas schwer damit, diese beiden Zeilen mit einer vernünftigen Lösung zu entfernen.
Zuletzt geändert von Manfred am Mo, 24. Nov 2008 14:49, 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!!
- 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,
wozu dieser Aufwand?
Öffne sie mit DELDBE, mache ein Go Top und danach ein DbSkip( 2 ) und gut ist.
Mache ich auch immer so (nur das bei mir ein skip reicht, da es nur eine Zeile am Anfang ist).
Oder unterscheiden sich Deine ersten beiden Zeilen im Aufbau von den restlichen (unterschiedliche Spaltenzahl)?
Viele Grüße,
Martin
wozu dieser Aufwand?
Öffne sie mit DELDBE, mache ein Go Top und danach ein DbSkip( 2 ) und gut ist.
Mache ich auch immer so (nur das bei mir ein skip reicht, da es nur eine Zeile am Anfang ist).
Oder unterscheiden sich Deine ersten beiden Zeilen im Aufbau von den restlichen (unterschiedliche Spaltenzahl)?
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.
- 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,
im Prinzip ja. Aber es ist keine LowLevel Funktion.
Memoread ließt alles wandelt aber laut support je nach Einstellung und Umgebung den Text um (OEM / ANSI - wobei ich dies bei mir noch nicht feststellen konnte). Solange du also nur Texte hast ist das alles OK. Auch CHR(26) etc. wird eingelesen.
Nur wenn du z.B. EXE oder ZIP Dateien einlesen willst - um z.B. eine Seriennummer einzubrennen, dann musst du das mit den LowLevel Funktionen machen.
Wenn die Textdateien aber sehr groß werden (so ab 1000 Zeilen) wird memoline() immer langsamer. Hier ist es dann besser sich die Zeilenanfänge und Zeilenende mit AT zu suchen und nicht mehr den String umzukopieren. Da gab es einen Artikel über schnelle Stringvererbeitung - ich meine der steht immer noch auf der Alaska Site.
im Prinzip ja. Aber es ist keine LowLevel Funktion.
Memoread ließt alles wandelt aber laut support je nach Einstellung und Umgebung den Text um (OEM / ANSI - wobei ich dies bei mir noch nicht feststellen konnte). Solange du also nur Texte hast ist das alles OK. Auch CHR(26) etc. wird eingelesen.
Nur wenn du z.B. EXE oder ZIP Dateien einlesen willst - um z.B. eine Seriennummer einzubrennen, dann musst du das mit den LowLevel Funktionen machen.
Wenn die Textdateien aber sehr groß werden (so ab 1000 Zeilen) wird memoline() immer langsamer. Hier ist es dann besser sich die Zeilenanfänge und Zeilenende mit AT zu suchen und nicht mehr den String umzukopieren. Da gab es einen Artikel über schnelle Stringvererbeitung - ich meine der steht immer noch auf der Alaska Site.
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 Martin,
jetzt hatte ich schon eine komplette Erklärung geschrieben, mußte sie aber wieder löschen, weil ich Deine Frage zu spät gelesen hatte . Ja, die ersten beiden Zeilen bestehen nur aus einer "Spalte" und danach geht es mit recht vielen Spalten weiter und das bekommt die DELDBE dann nicht mehr mit und macht eben eine draus.
@Hubert,
ich möchte nur eine Textdatei einlesen, die Tabelle mit vielen Spalten in Textform enthält. Aber wie gesagt, vorher die beiden Überschriften entfernen. Ich bin gerade dabei ein Experiment damit zu starten um zu sehen, ob ich kaperie, worum es da jetzt geht.
jetzt hatte ich schon eine komplette Erklärung geschrieben, mußte sie aber wieder löschen, weil ich Deine Frage zu spät gelesen hatte . Ja, die ersten beiden Zeilen bestehen nur aus einer "Spalte" und danach geht es mit recht vielen Spalten weiter und das bekommt die DELDBE dann nicht mehr mit und macht eben eine draus.
@Hubert,
ich möchte nur eine Textdatei einlesen, die Tabelle mit vielen Spalten in Textform enthält. Aber wie gesagt, vorher die beiden Überschriften entfernen. Ich bin gerade dabei ein Experiment damit zu starten um zu sehen, ob ich kaperie, worum es da jetzt geht.
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,
ich hatte den 2. Teil deiner Mail übersehen ...
Ein Schönheitsfehler hat dieser Code, eine mögliche Umwandlung durch memoread() wird so nicht zurückgeschrieben. Andererseits wenn man memowrit() verwendet, wird immer ein chr(26) angehängt.
In der Wissensbasis habe ich Funktionen hinterlegt die eine Datei ohne Umwandlung lesen und schreiben ...
Die 2. Zeile beginnt nach dem CRLF der ersten Zeile ... so muss man sich vorhangeln, wobei der 3. Parameter von AT() hier sehr wichtig ist. Unter Clipper musste man den Anfang immer abschneiden, was sehr viel Speicherplatz (intern 2*Länge des Strings um ein Zeichen abzuschneiden !) verbraucht hat. Umkopieren von Strings dauert relativ lange, daher ist es besser einfach die Start- und Endpositionen zu ermitteln.
PS: so die vertauschten Werte von AT() habe ich richtig gestellt.
Bei PowerBasic ist es genau andersherum ... sorry nochmal.
ich hatte den 2. Teil deiner Mail übersehen ...
Code: Alles auswählen
#define CRLF chr(13)+chr(10)
cTxt := memoread(cDatei)
nStart := at(CRLF,cTxt) // Ende der ersten Zeile
if nStart > 0
nStart += 2 // nun am Anfang der 2. Zeile
nStart := at(CRLF,cTxt,nStart) // Ende der zweiten Zeile
if nStart > 0
nStart += 2 // nun Anfang der 3. Zeile
endif
endif
if nStart=0 -> fehler ???
nZiel := fcreate(....)
FWrite( nZiel, substr(cTxt,nStart ) // eventuell auf fehler prüfen...
fclose(nZiel)
In der Wissensbasis habe ich Funktionen hinterlegt die eine Datei ohne Umwandlung lesen und schreiben ...
Die 2. Zeile beginnt nach dem CRLF der ersten Zeile ... so muss man sich vorhangeln, wobei der 3. Parameter von AT() hier sehr wichtig ist. Unter Clipper musste man den Anfang immer abschneiden, was sehr viel Speicherplatz (intern 2*Länge des Strings um ein Zeichen abzuschneiden !) verbraucht hat. Umkopieren von Strings dauert relativ lange, daher ist es besser einfach die Start- und Endpositionen zu ermitteln.
PS: so die vertauschten Werte von AT() habe ich richtig gestellt.
Bei PowerBasic ist es genau andersherum ... sorry nochmal.
Zuletzt geändert von brandelh am Mo, 29. Okt 2007 16:10, insgesamt 2-mal geändert.
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,
danke auch hier mal wieder für den Hinweis an den Kappeskopp. Das was in der Wissenbasis steht, hatte ich damals auch gelesen, aber mal wieder nicht verstanden, was der liebe Onkel mir damit sagen wollte. Jetzt wo ich eine Anwendung dafür habe, (eigentlich hatte ich die schon immer gehabt) verstehe ich worum es geht. Und Dank Wolfgang, werde ich jetzt auch die Funktion FileStr() und StrFile() in den Tools ausprobieren.
Manoman, wie schwer kann man sich das Leben eigentlich noch machen? Mal sehen, ob das wirklich so klappt, wie ich es haben muß.
danke auch hier mal wieder für den Hinweis an den Kappeskopp. Das was in der Wissenbasis steht, hatte ich damals auch gelesen, aber mal wieder nicht verstanden, was der liebe Onkel mir damit sagen wollte. Jetzt wo ich eine Anwendung dafür habe, (eigentlich hatte ich die schon immer gehabt) verstehe ich worum es geht. Und Dank Wolfgang, werde ich jetzt auch die Funktion FileStr() und StrFile() in den Tools ausprobieren.
Manoman, wie schwer kann man sich das Leben eigentlich noch machen? Mal sehen, ob das wirklich so klappt, wie ich es haben muß.
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
Hi Hubert,
das ist prima:
1) habe ich die Tools
2) sind die eh mit eingebunden
3) wenn es auch noch schneller geht damit--- na denn Prost
das ist prima:
1) habe ich die Tools
2) sind die eh mit eingebunden
3) wenn es auch noch schneller geht damit--- na denn Prost
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
Hi Hubert,
ich muß mal kurz eine Frage stellen: Was machst Du mit Deinem
at(cTxt,CRLF)
in dem Beispiel oben???
ich muß mal kurz eine Frage stellen: Was machst Du mit Deinem
at(cTxt,CRLF)
in dem Beispiel oben???
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
Hi Jan,
wenn ich das so richtig lese, dann würde ich sagen "Nö"
Ich habe es gerade ausprobiert.
Es muß so sein:
nAt := AT(CHR(10),cText)
Beim CHR(13) + CHR(10) wird vor dem letzten Zeichen aufgehört, bei CHR(13) und das letzte Zeichen wird nicht berücksichtigt.
Aber ich denke mal, Hubert hat das mir zuliebe schnell aus der Hüfte geschossen und vertauscht UND CRLF eingebaut.
wenn ich das so richtig lese, dann würde ich sagen "Nö"
Ich habe es gerade ausprobiert.
Es muß so sein:
nAt := AT(CHR(10),cText)
Beim CHR(13) + CHR(10) wird vor dem letzten Zeichen aufgehört, bei CHR(13) und das letzte Zeichen wird nicht berücksichtigt.
Aber ich denke mal, Hubert hat das mir zuliebe schnell aus der Hüfte geschossen und vertauscht UND CRLF eingebaut.
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,
schau mal auf diese Zeile
#define CRLF chr(13)+chr(10)
damit ich im späteren Text nicht immer chr(13)+chr(10) schreiben muss, definiere ich mir CRLF
-> diese beide Zeichen bewirken einen Waagenrücklauf und Zeilenvorschub
(auf englisch carriage return line feed)
Und genau diese Zeichen stehen im String um eine neue Zeile einzuleiten bzw. die alte zu beenden (sie gehören weder zur alten noch zur neuen Zeile, daher werden diese ausgestanzt).
AT() sucht das erste Auftreten eines Stringteils in einem anderen, wobei man den Startpunkt (3. Parameter) festlegen kann.
schau mal auf diese Zeile
#define CRLF chr(13)+chr(10)
damit ich im späteren Text nicht immer chr(13)+chr(10) schreiben muss, definiere ich mir CRLF
-> diese beide Zeichen bewirken einen Waagenrücklauf und Zeilenvorschub
(auf englisch carriage return line feed)
Und genau diese Zeichen stehen im String um eine neue Zeile einzuleiten bzw. die alte zu beenden (sie gehören weder zur alten noch zur neuen Zeile, daher werden diese ausgestanzt).
AT() sucht das erste Auftreten eines Stringteils in einem anderen, wobei man den Startpunkt (3. Parameter) festlegen kann.
Gruß
Hubert
Hubert
- 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:
So aus der Hüfte geschossen habe ich mal wieder die Parameterreihenfolge von AT verwechselt:Manfred hat geschrieben:Hi Jan,
wenn ich das so richtig lese, dann würde ich sagen "Nö"
Ich habe es gerade ausprobiert.
Es muß so sein:
nAt := AT(CHR(10),cText)
Beim CHR(13) + CHR(10) wird vor dem letzten Zeichen aufgehört, bei CHR(13) und das letzte Zeichen wird nicht berücksichtigt.
Aber ich denke mal, Hubert hat das mir zuliebe schnell aus der Hüfte geschossen und vertauscht UND CRLF eingebaut.
at( CRLF, cTxt, ...) muss es heißen.
Ich verbessere das mal oben im Text.
CHR(10) reicht aber bei PC Textdateien nicht aus, außer man zieht mehr ab, da es nun mal ein CRLF ist, das die Zeilen trennt. ABER wenn du UNIX (Linux) Dateien hast, dann gibt es dort nur LF also chr(10) - da heißt es etwas experimentieren.
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,
die Datei kommt von Amazon und hat laut HExeditor am Zeilenende 2 Zeichen stehen und zwar 0D und 0A.
Wenn ich Deinen Vorschlag mit CRLF nutze, dann wird 0A nicht erkannt.
Wenn ich aber nur CHR(10) nehme, dann geht es bis zum Ende.
Da wir aber gerade schon dabei sind, AT() sucht ja nur 1x, da ich aber weiß, das es immer (nur) 2 Zeilen sind, muß ich AT() 2x aufrufen. Ich suche jetzt schon verzweifelt in den Handbüchern. Gibt es nicht bei den ToolsIII oder direkt bei Xbase++ eine andere Funktion, bei der man angeben kann, wie oft nacheinander gezählt werden soll? Ich meine irgendwas dsbzgl. im Kopf zu haben, bin mir aber überhaupt nicht sicher, ob das nicht wieder eine Fata Morgana ist/war.
PS: Stopp, ich habe es gefunden. Ich denke AtNum() ist mein Freund.
die Datei kommt von Amazon und hat laut HExeditor am Zeilenende 2 Zeichen stehen und zwar 0D und 0A.
Wenn ich Deinen Vorschlag mit CRLF nutze, dann wird 0A nicht erkannt.
Wenn ich aber nur CHR(10) nehme, dann geht es bis zum Ende.
Da wir aber gerade schon dabei sind, AT() sucht ja nur 1x, da ich aber weiß, das es immer (nur) 2 Zeilen sind, muß ich AT() 2x aufrufen. Ich suche jetzt schon verzweifelt in den Handbüchern. Gibt es nicht bei den ToolsIII oder direkt bei Xbase++ eine andere Funktion, bei der man angeben kann, wie oft nacheinander gezählt werden soll? Ich meine irgendwas dsbzgl. im Kopf zu haben, bin mir aber überhaupt nicht sicher, ob das nicht wieder eine Fata Morgana ist/war.
PS: Stopp, ich habe es gefunden. Ich denke AtNum() ist mein Freund.
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:
schön, also eine normale PC Datei ... 0x0A = chr(10) = LFManfred hat geschrieben:...
die Datei kommt von Amazon und hat laut HExeditor am Zeilenende 2 Zeichen stehen und zwar 0D und 0A.
...
zeig doch mal was du da machst ?Manfred hat geschrieben:...
Wenn ich Deinen Vorschlag mit CRLF nutze, dann wird 0A nicht erkannt.
Wenn ich aber nur CHR(10) nehme, dann geht es bis zum Ende.
...
so steht das im RAM:
cTXT := "Dies ist ein TestCRLF2. ZeileCRLF3.Zeile"
? at(CRLF,cTXT) -> 18 -> 18. Zeichen des Strings ist CR
+2 damit wir das Zeichen nach dem CRLF haben.
dann ist man in der 2. Zeile auf '2'
Von dort startet man mit at(CRLF,cTxt,nStart) (nStart=20, CR zählt ein Zeichen) das nächste CR ist schon ein Zeichen nach dem Ende der 2. Zeile und 2 vor dem Anfang der 3. Zeile.
ALLERDINGS gilt das nicht für die low level Dateioperationen, dort fängt ja der Index mit 0 an !
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,
ich stricke gerade noch, aber wenn es fertig ist, dann stelle ich es hier rein. Es muß noch etwas anderes berücksichtigt werden, daran knabbere ich gerade noch.....
Tirili, der Tag war/ist gut...
ich stricke gerade noch, aber wenn es fertig ist, dann stelle ich es hier rein. Es muß noch etwas anderes berücksichtigt werden, daran knabbere ich gerade noch.....
Tirili, der Tag war/ist gut...
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
Blödsinn, was erzähle ich hier für einen Unfug. Die Datei wird auf einem Windowsrechner erzeugt mit einem Windowsprogramm.
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
So, hier ist es. Aber es klappt noch nicht ganz so, wie ich es brauche.
Das Trenzeichen Semikolon wird nicht erkannt. Es gibt also nur eine einzige Spalte und nicht mehrere, wie gewünscht. Bei einer anderen Textdatei ist ein TAB als Trenner drin, das klappt prima. Da habe ich ";" gegen CHR(9) ausgetauscht.
Code: Alles auswählen
#include "deldbe.ch"
#include "Fileio.ch"
#pragma Library("XBTBASE1.LIB")
#pragma Library("XBTBASE2.LIB")
PROCEDURE main()
cText := FileStr("text.txt")//gesamten Text einlesen
nStart := AtNum(CHR(10),cText,2) // nach 2 CHR(10) suchen
cText := FileStr("text.txt",,nStart)// ab der 2.Zeile nochmal lesen
StrFile(cText,"text2.txt") // ohne die ersten beiden Zeilen wieder wegschreiben
DBEINFO(COMPONENT_DATA, DELDBE_FIELD_TOKEN,";") // Semikolon als Trennzeichen zwischen den Spalten
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
DBESETDEFAULT("deldbe")
CLS
Dbusearea(.T.,"DELDBE","text2",,.F.)
browse()
RETURN
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,Manfred hat geschrieben:...Code: Alles auswählen
cText := FileStr("text.txt")//gesamten Text einlesen nStart := AtNum(CHR(10),cText,2) // nach 2 CHR(10) suchen cText := FileStr("text.txt",,nStart)// ab der 2.Zeile nochmal lesen
da haben wir doch gleich den Übeltäter
bei den XBToolsIII ist beim 3. Parameter nicht das 1. bzw. 3. Zeichen gemeint, sondern der Offset nach dem 1. Zeichen. Man muss also 0 übergeben um das erste Zeichen zu erhalten, deshalb warst du mit meiner CRLF Abfrage genau ein Zeichen daneben !
Mit deiner Abfrage nStart aus LF als Offset dürfte das ja dann stimmen, aber du lädst die Datei 2x in den Speicher, das ist recht unnötig !
Dafür (mit meiner Suchweise) hat man SubStr(cTxt,nStart) allerdings wie gesagt muss man dann so rechnen wie ich das gemacht habe.
Den dann gekürzten String schreibt man in die Datei (nach eventuellen anderen Tauschaktionen !)
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,
klar ich Doof. Ich bin doch zum Verrecken nicht auf Substr() gekommen. Wald Bäume... Mehr sage ich nicht..
klar ich Doof. Ich bin doch zum Verrecken nicht auf Substr() gekommen. Wald Bäume... Mehr sage ich 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!!
- 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
OK,
bei Substr() einen dabeitun und es klappt.
Aber wieso wird bei der nachfolgenden Aktion, das Semikolon beim Feldtrenner nicht anerkannt? Das verstehe ich nicht.
bei Substr() einen dabeitun und es klappt.
Aber wieso wird bei der nachfolgenden Aktion, das Semikolon beim Feldtrenner nicht anerkannt? Das verstehe ich 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!!
- 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
Jan
das habe ich heute schon hinter mir. Das Problem mit den Feldtrennern schiebe ich schon seit Freitag vor mir her. Ich dachte es läge nur an den Überschriften. Die sind aber jetzt weg und es klappt trotzdem nicht. Aber durch den heutigen Thread hier habe ich gleich wieder ein paar andere Probleme gelöst und werde die erstmal bearbeiten.
Ich dachte doch die ganze Zeit, Memoxxx() wäre nur für Memofelder. Tja, wie dumm muß man eigentlich sein, eine Anleitung so dermaßen falsch zu lesen? Und das über Jahre hinweg. Ärgerlich.
das habe ich heute schon hinter mir. Das Problem mit den Feldtrennern schiebe ich schon seit Freitag vor mir her. Ich dachte es läge nur an den Überschriften. Die sind aber jetzt weg und es klappt trotzdem nicht. Aber durch den heutigen Thread hier habe ich gleich wieder ein paar andere Probleme gelöst und werde die erstmal bearbeiten.
Ich dachte doch die ganze Zeit, Memoxxx() wäre nur für Memofelder. Tja, wie dumm muß man eigentlich sein, eine Anleitung so dermaßen falsch zu lesen? Und das über Jahre hinweg. Ärgerlich.
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!!