(CC) InStream binär lesen

18. Januar 2013 21:35

Guten Abend zusammen,

ich stehe gerade irgendwie auf dem Schlauch.
Die Datei test.dat hat insgesamt 1.109 Bytes. Nun muss ich die ersten 359 bytes auslesen und merken. (Im Anhang)
In PHP erledigt das folgende Funktion:

Code:
$fp1 = fopen ("./../data/test.dat", "rb");
    $PHP_VarA=fread($fp1,359);
    ...
fclose($fp1);


Nun brauche ich für ein kleines privates Projekt dieselbe Funktion in Navision:

Code:
File.TEXTMODE(FALSE);
File.OPEN("C:\Test.dat");
File.CREATEINSTREAM(InStream);

InStream.READ(NAV_VarA, 359);


Leider steht in NAV_VarA nicht derselbe Wert wie in $PHP_VarA.
Kann es sein, dass das irgendwie damit zusammenhängt, dass PHP i.d.R auf einem UNIX System läuft? Punkt0 Zeichensatz?
Muss ich noch eine Konvertierung durchführen?

PS: Habe in NAV auch schon BytePerByte in ein Char probiert. identisches Ergebnis zu obigen Beispiel.

Hat jemand Rat oder eine alternative Idee binäre Daten in NAV vorzuhalten?

Viele Grüße

Re: (CC) InStream binär lesen

19. Januar 2013 14:35

Hi,

INSTREAM kann nur Text lesen, wobei CR/LF unterdrückt wird. In diesem Fall wäre es besser direkt per File im Binärmodus zu lesen. Z.B. so:

Code:
FSource.OPEN(FileNameSource);
FSource.TEXTMODE(FALSE);
FSource.SEEK(0);  // sollte eigentlich nicht nötig sein
for i := 1 to 359 do
  FSource.READ(Content[i]);


Das ist natürlich ein wenig krass (byteweises lesen), aber es funktioniert. Content ist Deine Textvariable. Der Zeichensatz in NAV ist Codepage 850, da ist dann evtl. noch eine Konvertierung nötig.

LG Jens

Re: (CC) InStream binär lesen

19. Januar 2013 19:27

Hallo Jens,

der Textmode muss vor dem Öffnen der Datei gesetzt werden, da die Datei sonst im Textmodus geöffnet wird.
Das SEEK(0) ist wirklich unnötig, da der Dateizeiger nach dem OPEN am Anfang der Datei steht.

Re: (CC) InStream binär lesen

20. Januar 2013 10:13

Guten morgen und vielen Dank für den Tip.
Diese Variante hatte ich auch bereits probiert.

Um das aktuelle Problem zu verdeutlichen möchte ich euch 3 Screenshots zeigen:

1) test.dat mit HexEdit geöffnet:
Bild
2) test.dat mit MS notepad geöffnet:
Bild
3) test.dat mit Notepad++ geöffnet:
Bild

In NAV wird die Datei wie unter 2) behandelt, also identisch der Darstellung vom MS Notepad.
Wenn ich per PHP das Ergebnis per "Print" in einem Browser ausgeben lasse, bekomme ich exakt den Wert wie in 1) dargestellt.

Ich probiere mal auf Basis dieser Tabelle *klick* noch eine Konvertierung durchzuführen.
Meld mich nochmal gegen Abend :-)

Viele Grüße

Re: (CC) InStream binär lesen

20. Januar 2013 13:12

Wissensdurst85 hat geschrieben:Um das aktuelle Problem zu verdeutlichen möchte ich euch 3 Screenshots zeigen:

Dafür bitte die Boardfunktion "Dateianhang hochladen" und "Im Beitrag anzeigen" benutzen, um hier Bilder einzufügen. Das erspart Links zu werbeverkleisterten Webseiten.