DELDBE - RECORD_TOKEN

Zugriff, Engines, Konvertierung. Von ADS über DBF bis zu SQL.

Moderator: Moderatoren

Antworten
vern
Rookie
Rookie
Beiträge: 4
Registriert: Mo, 08. Okt 2007 11:01
Wohnort: Bonn

DELDBE - RECORD_TOKEN

Beitrag von vern »

Hallo zusammen,

habe mich eben angemeldet und muss auch gleich mal eine Frage loswerden.

Ich bin gerade dabei eine Routine zum Einlesen von TXT-Dateien zu schreiben.

Ich nutze hierfür DBEINFO + DELDBE.

Problematisch ist die Tatsache, daß die TXT-Datei am Zeilenende nur chr(10) aufweist. Sie wird durch eine JAVA-Anwendung auf einem LINUX-Server erstellt.

Da man lt. Doku die Database-Engine konfigurieren kann, habe ich den Wert für RECORD_TOKEN auf chr(10) gesetzt.

Code: Alles auswählen

if upper(cTyp) == "CSV"
   sOldDbe := DbeSetDefault( "DELDBE" )
   DbeInfo( COMPONENT_DATA, DELDBE_MODE, DELDBE_MULTIFIELD )
   DbeInfo( COMPONENT_DATA, DELDBE_RECORD_TOKEN, chr(10))  
   DbeSetDefault( sOldDbe)
endif
Leider wird die Einstellung von xBase++ völlig ignoriert. Es wird immer noch chr(13)+chr(10) erwartet.

Hat jemand einen Tipp?

Verwenden tue ich:
xBase++ 1.82.294 auf einem XP-Client.

Gruß
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9367
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 102 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Beitrag von Tom »

Hallo, Vern.

Am einfachsten wäre es, die Datei einzulesen, Chr(10) gegen Chr(13)+Chr(10) auszutauschen und wieder durchzuschreiben:

Code: Alles auswählen

cFile := FileStr("mytable.txt)
cFile := StrTran(cFile,Chr(10),Chr(13)+Chr(10))
StrFile(cFile,"mytable.txt",.T.)
(Das Beispiel setzt die Xbase Tools voraus. Ansonsten mit FRead(), FWrite() usw.)
Herzlich,
Tom
vern
Rookie
Rookie
Beiträge: 4
Registriert: Mo, 08. Okt 2007 11:01
Wohnort: Bonn

Beitrag von vern »

Hallo Tom,

danke für die prompte Antwort.

Ich habe deinen Vorschlag gleich mal umgesetzt. Es klappt einwandfrei.

Ich habe lediglich das Ergebnis der Konvertierung nicht in die Originaldatei sondern in eine Temp-Datei geschrieben. Dadurch bleibt das Original unverfälscht und ich muss mir keine Gedanken wg. evtl. fehlenden Schreibrechten in dem Quellverzeichnis machen.

Nochmals thanx,

Bernd
Benutzeravatar
Christof
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 265
Registriert: Mo, 01. Okt 2007 17:14
Wohnort: Bedburg
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal

Beitrag von Christof »

Hallo,

vielleicht hilft Dir ja auch folgendes weiter:

...
DbeSetDefault( "DELDBE" )
DbeInfo( COMPONENT_DATA, DELDBE_RECORD_TOKEN, chr(13)+chr(10) )
DbeInfo( COMPONENT_DATA, DELDBE_FIELD_TOKEN, chr(59) )

Hier gibt's halt irgendwo ein SLE für die Meldungen...
oXbpt:setCaption("Vorbereitungen durchführen... Bitte warten...")

oXbp:SetCaption("Datei einlesen...")
datei:=memoread("GGBIDA12.csv")

Wenn Trennzeichen = Semikolon, dann läuft die Funktion halt ins Leere, sonst...
oXbp:SetCaption("Trennkennzeichen Semikolon setzen...")
datei:=strTran(datei,chr(0))
datei:=strTran(datei,chr(9),chr(59))

oXbp:SetCaption("Zeilenendezeichen setzen...")
datei:=strTran(datei,chr(10),chr(13)+chr(10))

oXbp:SetCaption("Umlaut Ä korrigieren...")
datei:=strTran(datei,chr(196),chr(142))

oXbp:SetCaption("Umlaut ä korrigieren...")
datei:=strTran(datei,chr(228),chr(132))

oXbp:SetCaption("Umlaut Ö korrigieren...")
datei:=strTran(datei,chr(214),chr(153))

oXbp:SetCaption("Umlaut ö korrigieren...")
datei:=strTran(datei,chr(246),chr(148))

oXbp:SetCaption("Umlaut Ü korrigieren...")
datei:=strTran(datei,chr(220),chr(154))

oXbp:SetCaption("Umlaut ü korrigieren...")
datei:=strTran(datei,chr(252),chr(129))

oXbp:SetCaption("Umlaut ß korrigieren...")
datei:=strTran(datei,chr(223),chr(225))

oXbp:SetCaption("Temporäre Datei speichern...")

MemoWrit("GGBIDA12.TMP", datei)

So hab' ich halt gleich die Umlaute geändert...


Gruß

Christof
Antworten