Wie zum Lesen von text-Dateien mit Zeilenvorschub und Wagenrücklauf vermischt mit X++?
Ich versuche zu Lesen ein text-Datei mit Dynamics AX. Aber der folgende code ersetzt alle Leerzeichen in den Zeilen, die mit Kommas voneinander getrennt:
//Open file for read access
myFile = new TextIo(fileName , 'R');
myFile.inFieldDelimiter('\n');
fileRecord = myFile.read();
while (fileRecord)
{
line = con2str(fileRecord);
info(line);
…
Ich habe versucht, verschiedene Kombinationen der oben genannten code, einschließlich der Angabe, eine leere ''
Feld-Trennzeichen, jedoch mit dem gleichen Verhalten.
Der folgende code funktioniert, aber scheint, wie es sollte ein besserer Weg, dies zu tun:
//Open file for read access
myFile = new TextIo(fileName , 'R');
myFile.inRecordDelimiter('\n');
myFile.inFieldDelimiter('_stringnotinfile_');
fileRecord = myFile.read();
while (fileRecord)
{
line = con2str(fileRecord);
info(line);
Das format der Datei ist das Feld format. Zum Beispiel:
DATAFIELD1 DATAFIELD2 DATAFIELD3
DATAFIELD1 DATAFIELD3
DATAFIELD1 DATAFIELD2 DATAFIELD3
Also, was ich am Ende mit, es sei denn, ich verwenden Sie die Problemumgehung oben ist so etwas wie:
line=DATAFIELD1,DATAFIELD2,DATAFIELD3
Das zugrunde liegende problem ist hier, dass ich mit gemischten input-Formate. Einige der Dateien, die haben nur line-feeds {LF}
und andere haben {CR}{LF}
. Mit meinem workaround oben scheint zu funktionieren für beide. Gibt es eine Möglichkeit, den Umgang mit beiden, oder Streifen \r
aus der Datei?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Con2Str:
Con2Str abrufen einer Liste von Werten aus einem container und standardmäßig verwendet
comma (,)
zum trennen der Werte.Wenn kein Wert für die
sep
parameter angegeben, wird das Komma-Zeichen wird eingefügt zwischen-Elemente im zurückgegebenen string.Mögliche Optionen:
Wenn Sie möchten, dass der Raum, der die Standard-Trennzeichen ist, können Sie space übergeben, als zweiter parameter an die Methode
Con2Str
.Eine andere option ist, dass Sie können auch die Schleife über den container
fileRecord
zum abrufen der einzelnen Elemente.Code-snippet 1:
Folgenden code-snippet lädt den Inhalt der Datei in textbuffer und ersetzen Sie die Absatzmarken (
\r
) mit new line (\n
) Charakter. Der Zustandif (strlen(line) > 1)
helfen wird, überspringen Sie leere Zeichenfolgen, die durch das mögliche auftreten von aufeinanderfolgenden newline-Zeichen.Code-snippet 2:
Könnten Sie die Datei makro-statt hart codieren die Werte
\r\n
undR
kennzeichnet den lese-Modus.Nie versucht, verwenden Sie die Standard-RecordDelimiter als FieldDelimiter und nicht der Einstellung anderer RecordDelimiter ausdrücklich. Normalerweise Zeilen (Datensätze) werden getrennt durch \n und Felder werden getrennt durch Komma, tab, Semikolon oder einige andere symbol. Das könnte Sie auch schlagen einige seltsame Verhalten, wenn TextIO ist bei korrekter UTF-format. Sie nicht liefern ein Beispiel von einigen Zeilen aus, die Sie Datendatei, so dass zu raten ist schwer.
Lesen Sie mehr über TextIO hier: http://msdn.microsoft.com/en-us/library/aa603840.aspx
BEARBEITEN:
Mit dem zusätzlichen Beispiel der Inhalt der Datei, es scheint mir, die Datei ist ein fixed-width-Datei, wobei jede Spalte hat seine eigene Feste Breite. Ich würde eher empfehlen die Verwendung von subStr wenn das der Fall ist. Lesen Sie über substr hier: http://msdn.microsoft.com/en-us/library/aa677836.aspx
verwenden StrAlpha zu beschränken leere Werte nach der Konvertierung Con2Str