Probleme mit SDF

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

Moderator: Moderatoren

Antworten
ab-software
UDF-Programmierer
UDF-Programmierer
Beiträge: 51
Registriert: Di, 18. Okt 2005 12:35
Wohnort: 41747 Viersen
Kontaktdaten:

Probleme mit SDF

Beitrag von ab-software »

Hallo,

ich beschäftige mich gerade mit der Migration eines alten Clipperprogrammes. Das Programm liest die Artikkellisten diverser Lieferanten (mit unterschiedlichen Struckturen) ein und konvertiert die Daten in unser Format.

Die Listen liegen meistens im CSV Format vor. (Mal mit TAB getrennt , mal mit festen Feldlängen, mal mit Semikolon getrennt). Nun haben wir im Clipper Programm eine Funktion die die CSV Dateien Zeile für Zeile in eine Datenbank schreibt (da wir damals so besseren Zugriff hatten).

Code: Alles auswählen

		DBCREATE('TEMPO.DBF',{{'recTotal', 'C',nRecSize,0}}) // .DBF datenbank erzeugen
		USE TEMPO.DBF ALIAS temp EXCLUSIVE NEW

		APPEND FROM (cQuellFile) FOR ( COUNTER( nI++ ) ) SDF // alle S„tze anh„ngen
nRecSize ist die maximale Länge des Datensatzes für diese Liste

Den Code konnte ich fast komplett nach XBase übernehmen, bei einigen Listen tritt jetzt leider das Problem auf das der neue Datensatz zu früh angefangen wird. (Also bevor die Feldlänge erreicht wurde, bzw. schon vor einem CLRF)

Hat jemand eine Idee woran das liegen kann? Die SDF Dateien sehen soweit ich das sehen kann gut aus. Die Feldlänge wurde richtig erkannt.
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1930
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Danksagung erhalten: 3 Mal
Kontaktdaten:

SDF-Import

Beitrag von Rolf Ramacher »

Hallo,

vielleicht stimmt der Counter nicht ?
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
ab-software
UDF-Programmierer
UDF-Programmierer
Beiträge: 51
Registriert: Di, 18. Okt 2005 12:35
Wohnort: 41747 Viersen
Kontaktdaten:

Beitrag von ab-software »

Hallo,

die Funktion Counter nutze ich nur für die Anzeige bei welchem Datensatz ich gerade bin , sie gibt immer TRUE zurück.

Momentan habe ich das Problem das er immer ein Zeichen später beim einlesen angfängt.


Beispiel:
CSV Datei

Datensatz1
Datensatz2
Datensatz3

Datenbank:
Datensatz1
atensatz2
tensatz3
Benutzeravatar
andreas
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1902
Registriert: Mi, 28. Sep 2005 10:53
Wohnort: Osnabrück
Hat sich bedankt: 4 Mal
Kontaktdaten:

Beitrag von andreas »

Hallo,

wieso nimmst du nicht DELDBE.
Du könntest den Typ der Felder, Felder- und Satztrennzeichen und andere Eigenschaften festlegen. Sonst wird alles automatisch erkannt.
Gruß,

Andreas
VIP der XUG Osnabrück
ab-software
UDF-Programmierer
UDF-Programmierer
Beiträge: 51
Registriert: Di, 18. Okt 2005 12:35
Wohnort: 41747 Viersen
Kontaktdaten:

Beitrag von ab-software »

weil ich leider erstmal voll kompatibel zum alten Clipper Programm sein muss. Später werden wir das Programm komplett neu struckturieren aber erstmal soll es fast eins zu eins nach Clipper migriert werden. (Okay die Anzeige wird neu gestaltet)
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Beitrag von UliTs »

Hallo Yannik,

kann es sein, daß in der csv-Datei statt CR LF nur eins von beiden enthalten ist? Vielleicht kommt es deshalb zum Verschieben um 1 Zeichen / Datensatz.

Ansonsten könnte man das Einlesen auch mit FOpen/FRead recht einfach und schnell programmieren. Bei Interesse kann ich das hier veröffentlichen. :wink:

Uli
ab-software
UDF-Programmierer
UDF-Programmierer
Beiträge: 51
Registriert: Di, 18. Okt 2005 12:35
Wohnort: 41747 Viersen
Kontaktdaten:

Beitrag von ab-software »

Hallo ,
ne die Liste ist soweit sauber. Jeder Datensatz wird mit nem CR LF abgeschlossen.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15697
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hallo,

hast du die Beschreibungsdatei erstellt und sind die Datensätze wirklich genau gleich lang ? Clipper war da sehr flexibel, Xbase++ ist es nicht !
Notfalls hinten mit Blanks auffüllen.
Gruß
Hubert
ab-software
UDF-Programmierer
UDF-Programmierer
Beiträge: 51
Registriert: Di, 18. Okt 2005 12:35
Wohnort: 41747 Viersen
Kontaktdaten:

Beitrag von ab-software »

hallo,

die beschreibungsdatei hat sich bei mir automatisch erstellt. Ich gehe ja nur über das Append From und öffne die Datei nicht extra noch über die SDFDBE
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15697
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hi,

prüfe ob sie stimmt, eventuell ist die Satzlänge um eines zu kurz ...
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12909
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Beitrag von AUGE_OHR »

hi,

war das nicht so das man statt SDF das sdfdel.zip aus der Alaska
ASCN nehmen sollte ... (war da nicht was wegen Satzlänge ...) ?

gruss by OHR
Jimmy
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Beitrag von UliTs »

Kannst Du 2-3 Dummy-Datensätze hier reinsetzen?
Vielleicht habe ich dann kurzfristig eine komfortable Lösung.

Uli
ab-software
UDF-Programmierer
UDF-Programmierer
Beiträge: 51
Registriert: Di, 18. Okt 2005 12:35
Wohnort: 41747 Viersen
Kontaktdaten:

Beitrag von ab-software »

AUGE_OHR hat geschrieben:hi,

war das nicht so das man statt SDF das sdfdel.zip aus der Alaska
ASCN nehmen sollte ... (war da nicht was wegen Satzlänge ...) ?

gruss by OHR
Jimmy
Hallo , wo bekomme ich den das ZIP her?

@ brandelh : Die Längen habe ich bei mehreren Dateien überprüft die stimmen.

@UliTs Beispieldatensätze ist schwierig da das ein generelles Problem ist und bei mehrern Listen mit komplett unterschiedlichen Aufbauten auftritt
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16517
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Ari,
das bekommst Du von der Alaska-Homepage!
Klicke dort auf Downloads, dann hinter ACSN auf "List Section" und dann suchen... :D
Hier ist der direkte link

Viele Grüße,
Martin
:grommit:
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.
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Beitrag von UliTs »

Hallo Yannik,

wenn ich es richtig verstanden habe, geht es "nur" darum,
dass

Code: Alles auswählen

APPEND FROM (cQuellFile) FOR ( COUNTER( nI++ ) ) SDF
für beliebige DBF-Dateien als Ziel und zugehörige (z.B.) CSV-Dateien als Quelle korrekt funktioniert.
Wenn dem so ist, kann ich dafür eine kleine Routine schreiben, die obigen Befehl ersetzt. Die Routine könntest Du anschließend schnell und einfach anpassen (z.B. besondere Trennzeichen, nicht alle DBF-Datenfelder übernehmen, Verhalten bei variabler Satzlänge, etc.).

Uli

P.S. Low-Level-Dateizugriffe und Bits- & Byte-Manipulation liebe ich :D
Antworten