Entwickler-Ecke

Dateizugriff - bestimmten Wert auslesen


Licki - Mi 05.11.03 18:12
Titel: bestimmten Wert auslesen
Hallo...

Ich habe eine Datei in folgendem Format:

F0F0F0F3 F3F0F8F0 F8F1F1F8 F5F1F0F0 F0F0F0F0 F0F3F4F5 F8F0F9F9 F7F0F0F0 *000330808236210000000034580997000*

So und nun möchte ich das fettgedruckte auslesen. Einfach wiedergeben, in einem Textfeld etc., egal, einfach nur ausgeben. Wie funktioniert dies?

Danke im Vorraus.

Licki


barfuesser - Mi 05.11.03 18:30

Beschreib mal ein bisschen genauer, was Du möchtest. Suchst Du immer Teile, die einem bestimmten Muster entsprechen oder willst Du immer die 4 Zeichen ab der Position sowieso oder was?

barfuesser


Licki - Mi 05.11.03 18:33

Ja, genau. Ich suche die 4 Zeichen immer an der selben Position. Der Inhalt der Datei verändert sich zwar immer, aber die Zeichen stehen immer an genau der selben Position. Und diese 3 Zeichen möchte ich auslesen. Habe leider kein Plan wie.


barfuesser - Mi 05.11.03 18:37

Suche in: Delphi-Forum, Delphi-Library COPY ist Dein Freund.
barfuesser


Licki - Mi 05.11.03 19:05

Kannst du mir eventuell dazu Code posten, dass wäre nett. Habe mir im Forum schon Beiträge dazu angeschaut. Komme damit aber nicht klar. Ich habe mir gedacht, dass ich die Datei mit TFileStream öffne und dann dort eben diese 4 Zeichen auslesen... Ist aber doch schwieriger als gedacht. :(


barfuesser - Mi 05.11.03 19:14


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
if not FileExists(FileName) then Exit;
SrcList := TStringList.Create;
DstList := TStringList.Create;
SrcList.LoadFromFile(FileName);
if SrcList.Count > 0 then
  for i:=0 to SrcList.Count - 1 do
    DstList.Append(Copy(SrcList[i], 77, 4));
SrcList.Free;
doSmethingWithDstList;
DstList.Free;

in DstList stehen dann die Werte drin.

barfuesser


Licki - Mi 05.11.03 19:20

Dank dir. Aber was ist SrcList und DstList? Diese werden bei mir als undefinierten Bezeichner angezeigt?!


barfuesser - Do 06.11.03 08:28


Delphi-Quelltext
1:
SrcList := TStringList.Create;                    

sollte einem doch sagen, daß es sich dabei nur um eine TStringList handeln kann. Und das man Variablen vorher vereinbaren muß, sollte Dir auch bekannt sein. Ansonsten solltest Du Dich vielleicht erst einmal mit den Grundlagen der Delphi-Programmierung beschäftigen.

barfuesser


Tino - Do 06.11.03 10:38

Hallo Licki und :welcome: hier im Delphi-Forum.de

Du musst die Variablen vorher definieren:

Delphi-Quelltext
1:
2:
3:
Var
  SrcList,
  DstList: tStringList;

Gruß
Tino


Licki - Do 06.11.03 13:22

Habe nun eine Weile herumprobiert und herumgesucht nun habe ich dies:



Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
procedure TForm1.Button1Click(Sender: TObject);
var
 SrcList,
 DstList: tStringList;
 i : Integer;
begin
 if not FileExists('C:\WINDOWS\Desktop\Unbenannt.txt') then Exit;
  SrcList := TStringList.Create;
  DstList := TStringList.Create;
   SrcList.LoadFromFile('C:\WINDOWS\Desktop\Unbenannt.txt');
    if SrcList.Count > 0 then
     for i :=0 to SrcList.Count - 1 do
      DstList.Append(Copy(SrcList[i], 77, 4));
      SrcList.Free;
      DstList.Free;
      Label1.Caption:=DstList[i];
end;


Nun sollte doch auf dem Label1 das Ergebnis seien, oder? Stattdesen bekomme ich von Delphi diese Meldung: "Der Index der Liste Überschreitet das Maximum".

Kann jemand helfen? :(


barfuesser - Do 06.11.03 13:31

Du darfst DstList erst freigeben, wenn Du es nicht mehr benötigst. Also in Deinem Fall:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
procedure TForm1.Button1Click(Sender: TObject); 
var 
  SrcList, 
  DstList: tStringList; 
  i: Integer; 
begin 
  if not FileExists('C:\WINDOWS\Desktop\Unbenannt.txt') then Exit; 
  SrcList := TStringList.Create; 
  DstList := TStringList.Create; 
  SrcList.LoadFromFile('C:\WINDOWS\Desktop\Unbenannt.txt'); 
  if SrcList.Count > 0 then 
    for i :=0 to SrcList.Count - 1 do 
      DstList.Append(Copy(SrcList[i], 77, 4)); 
  SrcList.Free;
  Label1.Caption:=DstList[0];
  DstList.Free;
end;

Außerdem solltest Du nur innerhalb der For-Schleife mit i arbeiten.

barfuesser


mimi - Do 06.11.03 16:52

also ich würde das so lösen:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
function getW:String;
var
  DI:TStrings
  str:=String;
begin
  DI:=TStringList.Create;
  DI.LoadFromFile(FIleName);
  str:=Copy(di.strings[0],Pos('*',di.strings[0])+3,srLen(Pchar(di.strings[0])));;
  result:=str
end;

könnte fehler erhalten, habe das ebend aus dem kopf geschrieben.
sollte aber funktionieren.
wenn die größe gleichbleibt und das * immer an der selben position ist, sollte diese funktion funktionieren *G*


barfuesser - Do 06.11.03 17:01

Dann hast Du aber nur den Wert aus der ersten Zeile.

barfuesser


mimi - Do 06.11.03 18:46

reicht doch auch oder nicht?
oder steht in diese datei nur so ein kram drin und er möchte alle werte haben?
davon hat er nichts geschrieben, oder doch ?
und wenn:
einfach eine forschleife nehmen und fertig.