[Gelöst] Dataport schneidet Zeichen weg

31. März 2008 15:04

Hallo NG

ich habe eine Frage zu Dataports.
In einem Dataport habe ich diverse SourceExpr's mit fester breite (StartPos und Width) definiert.
Jetzt habe ich das Problem, dass bei einer Textdatei, ein Feld zwar eingelesen wird, aber nicht in der korrekten Länge!??! Es fehlt das letzte Zeichen.
Bei einer anderen Datei, die den gleichen Aufbau hat, funktioniert das Einlesen einwandfrei.

Die Felder bzw. die einzelnen Zeichen habe ich genau abgezählt, sind in beiden Dateien gleich.

Wie kann es sein, dass in der einen Txt Datei bei einem Feld nicht die komplette Länge eingelesen wird?

Gruß und Dank
JOT
Zuletzt geändert von jot am 4. April 2008 12:40, insgesamt 1-mal geändert.

31. März 2008 15:09

Langsam,
du willst also Daten nach Navision einlesen?
Wenn von einem Feld das letzte Zeichen abgeschnitten wird, landet es dafür im nächsten Feld an die erste Stelle?
Stell dich mal auf das betroffene DataportField und drück F9 - ist hier vielleicht Code platziert worden, der für das Verhalten verantwortlich ist?
Ein DataportField kann max. 1024 Zeichen lang sein - ist diese Größe in deiner Importdatei überschritten worden?

1. April 2008 09:45

Hallo Natalie

Richtig, ich will Daten nach Navision einlesen.
Und auch richtig, das fehlende Zeichen wird als erstes im nächsten Feld angezeigt.
In dem Feld (und auch in den anderen) gibt es keinen Code und die 1024 Zeichen werden auch nicht erreicht.

Das das fehlende Zeichen als erstes im nächsten Feld auftaucht hat mich stutzig gemacht. Deshalb habe ich mittlerweile zig-mal die einzelnen Felder abgezählt. Aber die Aufteilung stimmt. Für jede Startposition mit vorgegeberner Länge sind die Werte korrekt.

???

1. April 2008 09:50

Hm, ist denn im Dataport die Eigenschaft FileFormat auch auf Fixed umgestellt?
Wie sind die weiteren Einstellungen?

1. April 2008 09:58

Ja, FileFormat ist fixed, ansonsten:
FieldStartDelimiter: none
FieldEndDelimiter: none
FieldSeparator: none
RecordSeparator: <<NewLine>>
DataItemSeparator: <<NewLine>><<NewLine>>
UseReqForm: nein
ShowStatus: <Ja>

Es gibt ein DataItem, alles Standard, ausser AutoReplace: Ja

In der zu importierenden Datei ist ein Datensatz vorhanden...

TransactionType: <UpdateNoLocks>
Permissions: <Undefined>

1. April 2008 10:01

Ich nehme mal an, der Dataport zieht die Importdatei aus einer Einrichtung (da UseReqForm = Nein)?
Dann bleibt eigentlich nur noch der Weg über Importzeile und deine Feldlängenbeschreibung miteinander vergleichen.

Setz doch mal bitte eine solche Zeile hier rein und deine Einstellungen im FieldDesigner (Felder, StartPos, With) - wo genau passierts?

1. April 2008 10:29

Hmm, das habe ich ja auch schon gemacht... aber wer weiss, offensichtlich habe ich etwas übersehen...
Also, die Dataportfelder sehen wie folgt aus:

Enabled SourceExpr StartPos Width
Ja "ext. Auftragsnummer" 1 7
Ja MeldedatumVar 8 8
Ja MeldezeitVar 16 4
Ja "Name Melder" 20 7
Ja PrioVarTxt 27 1
Ja GerätID 28 20
Ja "Equipment-Typ" 48 30
Ja Equipment 78 30
Ja "Equipment-Version" 108 30
Ja StandortnummerVar 138 9
Ja NameTSP 147 40
Ja StrasseVar 187 40
Ja PLZVar 227 5
Ja OrtVar 232 40
Ja TelefonVar 272 32
Ja SystemTypVar 304 10
Ja Passwort 314 15
Ja BemerkungVar[1] 329 80
Ja BemerkungVar[2] 409 80
Ja BemerkungVar[3] 489 80
Ja BemerkungVar[4] 569 80
Ja BemerkungVar[5] 649 80
Ja BemerkungVar[6] 729 80
Ja BemerkungVar[7] 809 80
Ja BemerkungVar[8] 889 80
Ja BemerkungVar[9] 969 80
Ja BemerkungVar[10] 1049 80
Ja BemerkungVar[11] 1129 80
Ja BemerkungVar[12] 1209 80
Ja BemerkungVar[13] 1289 40

Ein Datensatz, den es zu importieren gilt, wäre: s.Anhang

Interessanterweise, jetzt, wo ich einige Werte "ersetzt habe" (Bemerkung, Strasse und HausNr, PLZ), bekomme ich beim importiren die Meldung
"'06527032' ist kein gültiges Datum"
Das ist richtig, das ist es ja auch nicht. Da zieht er ja auch schon nicht die richtigen Positionen????

Das eigentliche Problem aber war das Feld "StandortnummerVar". Hier wird das letzte Zeichen, die "5", abgeschnitten und an das nächste Feld "NameTSP" führend angefügt.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

1. April 2008 12:20

Mir fällt da was auf - eigentlich müsste es so heißen:

FieldStartDelimiter: <none>
FieldEndDelimiter: <none>
FieldSeparator: <none>
(beachte die eckigen Klammern).

Macht das einen Unterschied?

1. April 2008 12:31

Du meinst Groß-/Kleinschreibung?
<none> statt <None>?
Ich hab's ausprobiert: macht leider keinen Unterschied.

1. April 2008 13:16

Nein, weiter oben hast du nur none stehen statt <none>

1. April 2008 13:29

ach so... nein, da war ich nur zu faul. Im Dataport steht none jeweils mit <>.
Hast Du es schon abgezählt? Stimmts?

1. April 2008 15:48

Ja, scheint zu stimmen.
Bleibt noch eine Möglichkeit: In den Daten werden unzulässige Zeilenumbrüche verwendet.
Ein Zeilenumbruch darf nur einmal (nämlich am Ende des gesamten Datensatzes) erfolgen. Könnte es vor deiner Fehlerhaften Zeile einen solchen Umbruch geben?

1. April 2008 16:17

Das würde ich nicht ausschliessen.
Kannst Du mir sagen wie ich das prüfen kann?
STRPOS? Wie wäre der Character für einen Zeilenumbruch?
Und wenn es einen Zeilenumbruch gäbe, wie könnte ich den eliminieren?

1. April 2008 16:46

Öffne die Original Textdatei und werf einen Blick rein, ob eine Zeile (am verdächtigsten ist die Zeile direkt vor deiner hier veröffentlichten Zeile) besonders kurz erscheint.

Zeilenumbrüche entfernst du wie in allen anderen Textdokumenten auch durch bloßes Löschen des Umbruchzeichens (Rückwärtstaste oder Entf).

1. April 2008 16:55

hmmm,... OK, da haben wir wohl aneinander vorbei geschrieben.
Die Textdatei hat nur eine Zeile, ein Datensatz pro Datei. Und im Windows Texteditor kann ich auch keinen Umruch erkennen.

Und das mit dem Löschen meinte ich selbstredend als automatisierten Vorgang.
Aber es scheint ja kein Zeilenumbruch vorhanden zu sein.

Ich bin mit meinem Latein am Ende. Andere Dateien, mit exakt gleichem Aufbau können eingelesen werden. Diese eine nicht.

Noch irgendeine andere Idee?

1. April 2008 18:22

Eventuell sind auch andere Steuerzeichen in der Datei, die den Dateicursor beeinflussen. Ein Editor wie Notepad++ kann diese anzeigen. (->Ansicht->Alle Zeichen anzeigen)

4. April 2008 09:36

Hallo

habe die Datei jetzt auch mit Notepad++ "untersucht". Keine Steuerzeichen gefunden.

Ich habe mittlerweile auch versucht, die Datei über eine File-Variable (Textmode True/False) einzulesen und zu neu speichern, das brachte aber leider auch keinen Erfolg.
In den ersten 138 Zeichen steckt irgendwas, was ich nicht sehen kann. Denn auch per Code (zeige Zeichen ab Pos 138 mit der Länge 9), bekomme ich einen falschen Wert. Beim händischen abzählen nicht :(

Wie auch immer, ich weiss jetzt, dass nur bestimmte Dateien diesen Fehler bringen. Zwar kommen alle Importdateien von der gleichen Quelle, aber bei den Dateien mit bestimmter KundenNr schlägt der Import einfach fehl.

Bin ratlos.

Der Kunde klärt jetzt mit dem Lieferanten der Importdatei ab, was den Unterschied zwischen den einzelnen Importdateien ausmachen könnte.

Gruß und Dank
JOT

4. April 2008 12:23

Probier mal die Daten nach Excel zu importieren und dort den SÄUBERN Befehl anzuwenden ( der entfernt Sonderzeichen), dann wieder als Textdatei exportieren.

4. April 2008 12:40

Hallo Kowa

Ich habe die Datei nach Excel importiert und siehe da, es fehlt ein Zeichen.
Im Notepad, Notepad++ nicht zu erkennen, aber der Excel import machts deutlich. Nach manuellem Zeichenzählen hat sich herausgestellt, dass ein Zeichen fehlt und somit die Variable natürlich falsch eingelesen wird.

Hmm, jetzt muss der Anbieter der Datei ran.

Gruß und Dank
JOT