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 ?
arne_v Ekspert
19. juni 2016 - 15:46 #1
ASP classic eller ASP.NET?

Har du record formatet?
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
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
arne_v Ekspert
19. juni 2016 - 19:24 #4
Det boer kunne lade sig goere. Lad mig proeve og lave en lille test.
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.
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.
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

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





Premium
Test: Kæmpestort gaming-headset er perfekt til dine lange Teams-møder - men har også nogle besværligheder
Længe før vi andre blev slået hjem til hjemmekontorets endeløse webmøder har gamerne gennemskuet behovet for komfortabelt grej. Så vi tog danske EPOS top gamingheadset med på arbejde. Læs testen her.
Computerworld
Biden sender skjult besked til kode-folket: "Hvis du læser dette, har vi brug for din hjælp”
En stående invitation er blevet opdaget i kildekoden på Det Hvide Hus' hjemmeside. Men den er kun til de eksperter, der selv kan finde den.
CIO
Podcast: Hos Viking Life-Saving Equipment er it gået fra at være backend til at være noget, som kunderne spørger aktivt efter
Podcast, The Digital Edge: Viking leverer en stadig større del af deres produkt som en tjeneste. Som en del af tjenesten tager Viking ansvar for sikkerheden ved at levere, dokumentere og vedligeholde det nødvendige sikkerhedsudstyr. Hør hvordan Henrik Balslev senior digital director hos Viking har løftet den opgave.
White paper
Optimér produktiviteten og lad din printer følge med ud i skyen
De fleste virksomheder investerer betydelige beløb i den digitale transformationsproces, men skriver alligevel dokumenter ud som aldrig før, og medarbejdere opfatter decideret print som en forudsætning for at kunne arbejde effektivt. Alligevel er virksomhedens printstruktur ofte et systemmæssigt stedbarn, der er sammenstykket af mange forskellige enheder og platforme – hvilket skaber forvirring og betydeligt tidsspilde. Print passer heller helt ind i hverken den eksisterende digitale infrastruktur eller i den cloudbaserede infrastruktur, virksomheden sigter mod. Det udfordrer både sikkerhed, produktivitet og digital strategi som hele. I denne hvidbog kan du læse om udfordringerne og om, hvordan du håndterer dem mest effektivt som et led i den digitale transformationsproces.