Avatar billede ingeman Juniormester
19. juni 2016 - 15:21 Der er 6 kommentarer

Læse Delphi datafil

Er der nogen der ved om man kan læse Delphi .DAT datafiler fra ASP ?
Avatar billede arne_v Ekspert
19. juni 2016 - 15:46 #1
ASP classic eller ASP.NET?

Har du record formatet?
Avatar billede ingeman Juniormester
19. juni 2016 - 16:57 #2
Delphi code:
Type
SalgKart=packed Record
    Del:Longint;
    Case Kartcode:SmallInt of  // denne er rettet fra Integer
      0:(FlsValbet            :String[4];
        FlsValKurs          :Real48; // denne er rettet fra Real
        FlsSalgLand          :String[25];
        FlsOpdateret        :String[18];

        (*
        FragtRate1,FragtRate2,FragtRate3,FragtMaut,FragtOliePct:Real48;
        FragtIntValKg:Array[1..6] of Integer;
        FragtIntValSats:Array[1..6] of Real48;
        FragtVal:String[3];
        FragtTransp:String[20]*)
        );

      1:(FlsSpeditor          :String[30];
        FlsSpeditorTlf      :String[15];
        FlsSpeditorEmail    :array[1..3] of String[40];
        FlsSpeditorKd        :String[1]);
      2:(FlsDistinationTst    :String[30];
        FlsDistinationTstTlf :String[15];
        FlsDistinationEmail  :array[1..3] of String[40];
        FlsDistinationTstKd  :String[1];
        FlsDistinationTstMrk :String[6]);
      3:(FlsLeverandor        :String[30];
        FlsLeverandorTlf    :String[15];
        FlsLeverandorEmail  :array[1..3] of String[40];
        FlsLeverandorKd      :String[1]);
      4:(FlsKasseLeverandor  :String[30];
        FlsKasseLeverandorTlf:String[15];
        FlsKasseLeverandorEmail :array[1..3] of String[40];
        FlsKasseleverandorKd :String[1]);
      5:(FlsLevOpl            :String[30];
        FlsLevOplTlf        :String[15];
        FlsLevOplEmail      :array[1..3] of String[40];
        FlsLevOplKd          :String[1]);
  end;

Var SalgKartRec : SalgKart;
---
Det skal være fra ASP Classic
Avatar billede ingeman Juniormester
19. juni 2016 - 17:05 #3
En anden Delphi recordset

Type
Kundefil=Packed Record
                Del      :Longint;
                Kundnr    :String[8];
                Lnavn    :Array[1..4] of String[30];

                Kndmrk        :Array[0..96] of String[6];
                KndMrkSpKd    :Array[0..96] of String[1];
                KndMrkLevOplKd,
                KndMrkHjSk,
                KndMrkHjDk    :Array[0..96] of String[2];

                KndEkrBl,KndSaldo:Real48;

                LandeKode :String[2];
                Sprogkode :String[2];
                Valkode  :String[2];

                Telefon  :String[20];
                Telefax  :Array[1..3] of String[20];
                Email    :Array[1..8] of string[40];
                Betalbtg  :String[4];
                Rabat    :String[3];
                Agent    :String[3];
                Afd      :String[2];
                AntFakt  :String[2];

                KundSenr  :String[15];
                KndResv  :String[1];          (*reserve*)

                KndLevNr  :String[8];          (*Liferrantnr*)
                FragtKode :String[2];

                FragtRate :Real48;              (*Fragt pr kg*)
                MrkKode  :String[1];          (*Aut. etikkette udskrift j/n*)

                Kfk:Array[1..20] of String[1];  (*Kfk[1] = FakturaOpdeling
                                                  Kfk[2] = Labeltype
                                                  Kfk[3] = Terminalkode
                                                  Kfk[4] = Discount ovrf
                                                  Kfk[5] = Tilbagh. faktura
                                                  Kfk[6] =
                                                  Kfk[7] = J=Faktura pr Post N=Orginal faktura via email
                                                  Kfk[8] = N=Ingen factoring J=Factoring*)
              end;

Var Krec:Kundefil
Avatar billede arne_v Ekspert
19. juni 2016 - 19:24 #4
Det boer kunne lade sig goere. Lad mig proeve og lave en lille test.
Avatar billede arne_v Ekspert
20. juni 2016 - 04:17 #5
OK. Her er en lille demo.

Pascal kode:


program wrtrec;

type
  testrec = packed record
    a : SmallInt;
    b : LongInt;
    c : string[5];
    d : array [1..2] of string[10];
  end;

var
  testfile : file of testrec;
  buf : testrec;

begin
  assign(testfile, 'C:\work\test.dat');
  rewrite(testfile);
  buf.a := 123;
  buf.b := 456;
  buf.c := 'ABC';
  buf.d[1] := 'DEF';
  buf.d[2] := 'GEH';
  write(testfile, buf);
  buf.a := buf.a + 1;
  buf.b := buf.b + 1;
  write(testfile, buf);
  close(testfile);
  readln;
end.


VBS kode:


Function ReadSmallInt(binf) ' only works with positive numbers
    buf = binf.Read(2)
    ReadSmallInt = 256 * AscB(MidB(buf, 2, 1)) + AscB(MidB(buf, 1, 1))
End Function

Function ReadLongInt(binf) ' only works with positive numbers
    buf = binf.Read(4)
    ReadLongInt = 256 * 256 * 256 * AscB(MidB(buf, 4, 1)) + 256 * 256 * AscB(MidB(buf, 3, 1)) + 256 * AscB(MidB(buf, 2, 1)) + AscB(MidB(buf, 1, 1))
End Function

Function BytesToString(buf, start, len)
  s = ""
  For i = 1 To len
    s = s & Chr(AscB(MidB(buf, start + i - 1, 1)))
  Next
  BytesToString = S
End Function

Function ReadString(binf, len)
    buf = binf.Read(1 + len)
    ReadString = BytesToString(buf, 2, AscB(MidB(buf, 1, 1)))
End Function


Set binf = CreateObject("ADODB.Stream")
binf.Type = 1 ' adTypeBinary
binf.Open
binf.LoadFromFile "test.dat"
Do While Not binf.EOS
    a = ReadSmallInt(binf)
    b = ReadLongInt(binf)
    c = ReadString(binf, 5)
    d1 = ReadString(binf, 10)
    d2 = ReadString(binf, 10)
    MsgBox CStr(a) & "," & CStr(b) & "," & c & "," & d1 & "," & d2
Loop
binf.Close


Det virker hos mig.
Avatar billede arne_v Ekspert
20. juni 2016 - 04:20 #6
Bemaerk at det er kun en demo.

Du skal have:
* fundet ud af hvilken stoerrelse data har i din Delphi version.
* fundet ud af real48 formatet
* fundet ud af case
* fundet ud af negative integers
etc.etc.

Men demo boer give dig nogle ideer om hvordan det kan goeres.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester