Entwickler-Ecke

Dateizugriff - freies Dateiformat auslesen


joerghamster - Do 20.03.03 20:12
Titel: freies Dateiformat auslesen
Hi,

hab ein kleines problem.

ich hab ne sicherungsdatei von nem alten Dosprogramm welches ich in windows umsetzen sollte. Nun muss ich die datei auslesen und bekomme es absolut nicht hin.

Ich muss nach dem xten Zeichen der datei 98 zeichen auslesen und die dann weiterverarbeiten, dann die nächsten 98 usw.

Nur ich bekomme es nicht hin dass ich Bei der Datei zu der position x komme und dann exact 98 zeichen auslese (entweder kommen fehlermeldungen beim compilieren oder beim auslesen I/O fehler oder er fängt an ner falschen position an zu lesen . . . . . )

Dass es geht weiß ich, da ich sowas vor ein paar jahren schon mal gemacht hab, aber es will einfach nicht klappen.

Kann mir einer von euch sagen wie des geht ????

Gruß Joerghamster


SMI - Do 20.03.03 21:01

Es wäre sicherlich hilfreich wenn du deinen Quelltext posten würdest.
Folgender Code könnte dir aber helfen.


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
var
  FromF: file;
  NumRead: Integer;
  Buf: array[1..98] of Char; //Buffer für 98 Zeichen
  x:integer;
begin
  x:=10; //Deine x Position hier 10
  AssignFile(FromF, 'D:\xxx.txt');
  Reset(FromF, 1); // Record size = 1byte! Sonst kann es Problememit seek geben
  seek(FromF,x); //Position X anspringen
  // 98 Bytes in den Buffer
  BlockRead(FromF,Buf, SizeOf(Buf));
  // erneut 98 Bytes in den Buffer
  BlockRead(FromF,Buf, SizeOf(Buf));
  CloseFile(FromF);
end;



SMI[/code]


joerghamster - Fr 21.03.03 18:52

:oops:

Ich hatte eigentlich genau den selben quelltext . . . . aber hatte irgendwo nen kleinen dreher drinnen :?

Dein quellcode tut einwandfrei.

Vielen Dank für die hilfe


SMI - Fr 21.03.03 19:05

Höchstwarscheinlich hat bei dir bei dem dem Reset Befehl "Reset(FromF, 1)" die eins gefehlt. Ansonsten ist ein Seekschritt anstatt einem Byte genau 128 Bytes groß/lang.

Dazu den Eintrag aus der Delphi Hilfe, ist leider in Englisch(da ich mit der englischen Delphi Version arbeiten muss).

Zitat:

procedure Reset(var F [: File; RecSize: Word ] );

.....

F is a variable of any file type associated with an external file using AssignFile. RecSize is an optional expression, which can be specified only if F is an untyped file. If F is an untyped file, RecSize specifies the record size to be used in data transfers. If RecSize is omitted, a default record size of 128 bytes is assumed.


Den selben Fehler habe ich auch schon mehrmals verbockt, daher kenn ich ihn so gut :wink:

SMI


joerghamster - Sa 22.03.03 00:57

hatte es auch mit 1 versucht, aber er ist bei seek nie so weit gegangen wie er sollte . . . . . . . nu tut es wenigstens :-)

weißt du zufällig auch wie ich einen array erstelle in der form

datensatz[1].name
datensatz[1].adresse
.
.
.


SMI - Sa 22.03.03 01:11

Das ist einfach:



Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
type
 RecordSet = Record
   Name     : STRING[20];
   addresse :String [40];
 end;

Var
  a: array [0..20]of RecordSet;
begin
 a[0].Name:= 'TEST';
 a[0].Addresse:= 'TEST2';
 Showmessage(a[0].Name);
 Showmessage(a[0].Addresse);
end;



SMI


joerghamster - So 23.03.03 12:45

Danke, habs auch kurz nachdem ich es gepostet hatte rausbekommen konnte nur meinen post nichtmehr ändern wil mein proxi abgeschmirt is (sch... isdn :-( )

Aber trotzdem vielen dank für die hilfe . . . . . das hier is das erste forum über delphi wo ich nicht 1-2 wochen auf ne antwort warten musste ;-)

Werde auf jedenfall öfters hier vorbeischauen

Gruß joerghamster