Delphi-PRAXiS
Seite 3 von 4     123 4      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   untypisierte dateien (https://www.delphipraxis.net/150104-untypisierte-dateien.html)

khh 8. Apr 2010 10:43

Re: untypisierte dateien
 
Zitat:

wie sieht eigentlich die Definition von Datensatz aus?
die gibts leider nicht :-(

[edit=mkinzler]Tag gefixt Mfg, mkinzler[/edit]

p80286 8. Apr 2010 11:06

Re: untypisierte dateien
 
@DeddyH
Danke! war mir entfallen.

Zitat:

Zitat von khh
ich hab jetzt
mit:

Delphi-Quellcode:
    read(f,datensatz);
    test:=datensatz.zeile;
    name := datensatz.name;
    oemtochar(PChar(test),PChar(test2));
    oemtochar(PChar(name),PChar(name2));

Hiernach hatte ich angenommen, daß "Datensatz" ein Record sei?

Gruß
K-H

khh 8. Apr 2010 11:25

Re: untypisierte dateien
 
Zitat:

Zitat von p80286
@DeddyH
Danke! war mir entfallen.

Zitat:

Zitat von khh
ich hab jetzt
mit:

Delphi-Quellcode:
    read(f,datensatz);
    test:=datensatz.zeile;
    name := datensatz.name;
    oemtochar(PChar(test),PChar(test2));
    oemtochar(PChar(name),PChar(name2));

Hiernach hatte ich angenommen, daß "Datensatz" ein Record sei?

Gruß
K-H

ist ja auch richtig
ich hab einfach einen Record definiert, insgesamt 1024 byte gross,
habe die einzelnen Werte die ich brauche definiert(sieht man ja im File wo die stehen, und den Rest wie zb "zeile" gelesen und "weggeworfen".
Leider funktioniert das so nicht, wie ich schon oben erwähnte.

test habe ich nur testweise gelesen um zu sehen was nach oemtochar "rüberkommt".
Endgültig brauche ich nur artnr bezeichnung und preis, welche an festen Stellen im DS stehen.


also datensatz.name 25 byte gross, datensatz.nr 3 byte gross und datensatz.preis 8 byte gross.

khh 8. Apr 2010 12:41

Re: untypisierte dateien
 
Zitat:

Zitat von p80286
Delphi-Quellcode:
type
  tMyrecord = packed record
       f1 : array [0..$4A] of byte;
       name : array [$4B..$63] of char;
       trenn1: byte;
       rest : array [$65..$3FF];
   end;

var
  buffer : array [0..1023] of char;
  myrecord : tMyrecord absolute buffer;
  gelesen : integer;
...
fs:=tfilestream.create(.......);
gelesen:=fs.read(buffer,sizeof(buffer));
...
und dann entweder im Debugger anschauen was in dem Record steht, oder eine Printausgabe machen oder

ich komme der Sache näher, so funktionierts "fast" :-)

bis auf die Umlaute krieg ich die richtige Bezeichnung, aber oemtochar bringt leider nix :-(

DeddyH 8. Apr 2010 13:03

Re: untypisierte dateien
 
Liste der Anhänge anzeigen (Anzahl: 2)
Ich hab mal alles bis auf die Bezeichnung aus der Datei rausgeworfen und mit folgendem Code getestet:
Delphi-Quellcode:
var sl: TStringlist;
    s: string;
begin
  sl := TStringlist.Create;
  try
    sl.LoadFromFile('E:\muster.txt');
    s := sl[0];
    OemToChar(PChar(s),PChar(s));
    ShowMessage(s);
  finally
    sl.Free;
  end;
end;
Sieht einwandfrei aus (siehe Anhang).

khh 8. Apr 2010 13:46

Re: untypisierte dateien
 
Zitat:

Zitat von DeddyH
Ich hab mal alles bis auf die Bezeichnung aus der Datei rausgeworfen und mit folgendem Code getestet:
Delphi-Quellcode:
var sl: TStringlist;
    s: string;
begin
  sl := TStringlist.Create;
  try
    sl.LoadFromFile('E:\muster.txt');
    s := sl[0];
    OemToChar(PChar(s),PChar(s));
    ShowMessage(s);
  finally
    sl.Free;
  end;
end;
Sieht einwandfrei aus (siehe Anhang).

sieht wirklich gut aus, muss ich mal sehen ob ich noch wo nen Fehler drin hatte ;-)

DeddyH 8. Apr 2010 13:50

Re: untypisierte dateien
 
Vielleicht SetLength() für den Zielstring vergessen? Ich benutze ja 2 mal dieselbe Stringvariable im Gegensatz zu Deinem Code.

khh 8. Apr 2010 13:58

Re: untypisierte dateien
 
Zitat:

Zitat von DeddyH
Vielleicht SetLength() für den Zielstring vergessen? Ich benutze ja 2 mal dieselbe Stringvariable im Gegensatz zu Deinem Code.

werd das später nochmal in Ruhe durchchecken, muus jetzt erst mal noch was anderes machen.
ich danke euch bis hierhin, melde mich sicher nochmal.

khh 9. Apr 2010 08:09

Re: untypisierte dateien
 
hallo zusammen,
das mit den Umlauten funktioniert zwar noch nicht, aber das ist erst mal zweitrangig.

Das Einlesen des einen DS aus dem Beispiel funktioniert und zwar folgendermassen:

Delphi-Quellcode:
tMyrecord = packed record
       f1 : array [0..$36] of byte;
       artnr: array [$37..$3C] of char;
       f2 : array [$3D..$4A] of byte;
       name : array [$4B..$63] of char;
       trenn1: byte;
       name2 : array [$65..$7D] of char;
       f3 : array [$7F..$DF] of byte;
       preis : array [$E0..$E6] of char;
       rest : array [$E7..$3FF] of char;
   end;

   
var
  buffer : array [0..1024] of char;
  myrecord : tMyrecord absolute buffer;
  gelesen : integer;
  FS: TFileStream;
  test1, test2, test3, test4: string;

begin
fs:=tfilestream.create('muster.txt', fmOpenRead);

gelesen:=fs.read(buffer,sizeof(buffer));
 test1:= myrecord.artnr ;
 test2:= myrecord.name ;
 test3:= myrecord.name2 ;
 test4:= myrecord.preis ;
Die vollständige Datei hat aber 557056 byte , also 544 DS.
die lassen sich zwar vollständig in den Buffer lesen, (buffer : array [0..557056] of char;) aber wie komm ich an die positionen ran?
ne while eof geht ja auchnicht :-(
EDIT: ich könnte ja 544 files draus machen, aber sicher geht das einfacher, oder?
Danke für eure Hilfe.

Klaus01 9. Apr 2010 08:16

Re: untypisierte dateien
 
Guten Morgen,

der "Lesezeiger, bzw. Leseposition" ändert sich nach jedem Lesevorgang.
Liest Du jeweils immer einen Datensatz ein steht der Lesezeiger auf dem nächsten Byte hinter dem
Datensatz. Liest Du einen weiteren Datensatz fängt der Lesevorgang an der Position an wo der Lesezeiger
hinzeigt.

Die Anzahl der Datensätze erhälst Du so: Stream.size div Datensatzgröße.

Grüße
Klaus


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:44 Uhr.
Seite 3 von 4     123 4      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz