Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi strings aus txt file lesen (https://www.delphipraxis.net/48412-strings-aus-txt-file-lesen.html)

agm65 24. Jun 2005 21:24


strings aus txt file lesen
 
nochmal guten abend leute...

naja nun zu meinem problem...
also ich möchte aus einer txt file mehere strings auslesen, die strings sind getrennt durch einen
':'. ich weiss also immer den ersten teil der stings: bsp:


name1: string
name2: string
name3: string


und jetzt möchte ich nur diese strings auslesen, die namen vor dem ':' sind immer die selben !


Code:
if s <> '' then
    begin
    KeyPath := s + '\dir\textfile.text;
    if FileExists(KeyPath) then
    begin
    AssignFile(F, KeyPath);
    Reset(F);
    ReadLn(f,s) ; // eine split funktion geziehlt auf die werte name1-X
     
 
    CloseFile(F);
    end;
    end;
was muß ich meiner funktion hinzufügen, damit er mir alle stings (name1-X) ausgibt ?



danke euch allen ....

DGL-luke 24. Jun 2005 23:04

Re: strings aus txt file lesen
 
wenn du es dir einfach machen willst: Delphi-Referenz durchsuchenTIniFile

Wenn nicht:

Delphi-Quellcode:
function getdata(filename:string):TStrings;
var f:textfile;
    s,s1:string;
    mark:integer;
begin
result:=TStirngList.create;

assignfile(f,filename);
reset(f);
while not eof(f) do
 begin
  readln(f,s);
  mark:=pos(':',s);
  s1:=copy(s,0,mark) + '=' +        copy(s,mark+2,length(s));
  //  key             trennzeichen value
  result.add(s1);
 end;

end;
liest alles in eine handliche stringlist im format 'key=value' ein, mit dem du dann nach belieben verfahren kannst.
(wobei da auch ein stringreplace('. ','=',[rfReplaceAll]) gereicht hätte :roll:

und dann würde ich vom namen(string1,string2,string3) weggehen und mit reinen indizes arbeiten(0,1,2).
macht es einfacher, da du dann in die stringlist nur noch value reinschreiben musst.
wenn du namen behalten willst, ist der Königsweg TInifile.

agm65 24. Jun 2005 23:12

Re: strings aus txt file lesen
 
du meinst wenn ich als seperator ein = nehme, dann kann ich die wie ini files behandeln ?

Ultimator 24. Jun 2005 23:13

Re: strings aus txt file lesen
 
Delphi-Quellcode:
while not EoF(f) do
  begin
    ReadLn(f, s);
    s := copy(s, pos(':', s)+1, length(s)-pos(':', s));
    Memo1.Lines.Add(s);
  end;

Is ungetestet, müsste aber gehen.
Musst halt u.U. n bissl mit dem +1 rumspielen, evtl. musst dus vergrößern/verkleinern.

//rotes Kästerli?!

agm65 24. Jun 2005 23:18

Re: strings aus txt file lesen
 
aber es gibt ja auch noch ':' die nichts mit diesen strings zu tuen haben ....da macht er das ja dann auch ....kann man nicht noch mehr angeben Name1: also seperator ?

agm65 24. Jun 2005 23:28

Re: strings aus txt file lesen
 
hmm ne also geht leider nicht :( !

scp 24. Jun 2005 23:46

Re: strings aus txt file lesen
 
Aber der erste : ist doch immer zum trennen, oder? Dann klappt es doch mit Pos(), du musst nur bei StringReplace() das rfReplaceAll weglassen, falls du es verwendest, die [] müssen dabei stehenbleiben.

agm65 26. Jun 2005 20:58

Re: strings aus txt file lesen
 
so ich hab das jetzt fast das ganze wochenende rumgebastelt...und es läuft nicht !

ich hab es gedreht und gewendet wie ich wollte...meine text file sieht so aus:

**************************** Head *****************************

Time: 10:55:03 PM
Date: 6/25/2005

**************************** DATA ****************************

NAME1: wert1
NAME2: wert2
NAME3: wert3
NAME4: wert4
NAME5: wert5

***************************** End *****************************

und ich brauche die werte hinter den namen !
aber es sind manchmal auch nur 2 namen + werte oder 30 !

jeder wert soll ein extra string werden ....ich brauch die werte in getrennten strings !
erbitte dringend hilfe...


thx cu

DGL-luke 26. Jun 2005 21:10

Re: strings aus txt file lesen
 
dann mach es mit inifiles..... :roll:

ansonsten:

Delphi-Quellcode:
type TTextfile = record
 date:string;
 time:string;
 Data: array of string;
end;

function getfile(filename:string):TTextfile;
var f:textfile;
    s:string;
begin
assingfile(f,filename);
reset(f)
readln(f,s); //head skippen
readln(f,s); //leerzeile skippen
readln(f,s);
result.date:=copy(s,length('Time: ')+1,length(s));
readln(f,s);
result.time:=copy(s,length('Date: ')+1,length(s));
readln(f,s);readln(f,s),readln(f,s); //drei zeilen skippen
readln(f,s);
while (s<>'') do
 begin
  setlength(result.data,length(result.data+1));
  result.data(high(result.data)):=s;
  readln(f,s);
 end;
end;
reicht dir das? du musst den rückgabewert der funktion natürlich iener variablen zuweisen.

dazu sei noch gesagt, dass das setlength in der schleife unelegant und unperformant ist.

und ausserdem hast du jetzt nur immer "namex: wertx" in dem array drin, da solltest du aber wohl mit den tipps, die du bekommen hast, selbst rankmen.

agm65 26. Jun 2005 21:13

Re: strings aus txt file lesen
 
thx ich werde es testen ! auch das mit ini files.... !

Thanatos81 26. Jun 2005 21:32

Re: strings aus txt file lesen
 
Ne Alternative wäre auch das hier:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var myList : TStringList;
    myFile : Textfile;
    temp    : String;
    position : Integer;
begin
  if OpenDialog1.Execute then
    begin
      try
        myList := TStringList.Create;
        AssignFile(myFile,OpenDialog1.FileName);
        reset(myFile);
        while not(EoF(myFile)) do
          begin
            readLn(myFile,temp);
            position := Pos(':',temp);
            if (position > 0)
              then myList.Add(trim(Copy(temp,position+1,length(temp))));
          end;
        //Hier einfügen, was auch immer du mit den Daten machen möchtest
      finally
        closeFile(myFile);      
        FreeAndNil(myList);
      end;
    end;
end;
Das ganze ist nicht statisch, wenn du also mal was am Layout der TextFile änderst, brauchste das Prog nicht ändern. Außerdem brauchste dann auch kein fixed-size Array, was du bei Änderungen anpassen müsstest, bzw. sparst dir die Arbeit mit SetLength, Length, Low, High etc.

Aber wenn du auf ne INI umsteigen kannst, würde ich dir das auch empfehlen, ist einfach schöner.

//begin edit
Nur mal so nebenbei, was hat denn das mit Multimedia zu tun :gruebel:
//end edit

agm65 27. Jun 2005 02:53

Re: strings aus txt file lesen
 
habe mich nach langem testen für die ini version entschieden....
jetzt hab ich ein neues problem:

ich habe jetzt meine textfile so aufgebaut:

text:
balblsbalbblalabjlajblkdsjflkdsf
sdslökslökjfklödjfldjfkldjfdlkfj


[Data1]
VALUE1=Wert1
[Data2]
VALUE2=Wert2
[Data3]
VALUE3=Wert3



er liesst die werte nicht richtig aus...manchmal komtm einfach nichts...ist vielleicht ein bekanntes ini problem...das hatte ich schonmal bei nem anderen tool....

kann mir da einer helfen ?

DP-Maintenance 27. Jun 2005 02:54

DP-Maintenance
 
Dieses Thema wurde von "Christian Seehase" von "Multimedia" nach "Sonstige Fragen zu Delphi" verschoben.
Hat nichts mit Multimedia zu tun

Christian Seehase 27. Jun 2005 03:00

Re: strings aus txt file lesen
 
Moin Agm,

wenn Du es mit einer Ini-Datei machst könntest Du die Daten so aufbauen:

[Head]
Time=
Date=

[Data1]
Name1=
Name2=
...

[Data2]
Name1=
Name2=
Name3=
...

Wenn die Werte falsch ausgelesen werden stellt sich mir die Frage: Wie liest Du sie denn?

Luckie 27. Jun 2005 03:00

Re: strings aus txt file lesen
 
Ini-Dateien dürfen keine Werte ohne Sektion und Schlüssel beinhalten.

agm65 27. Jun 2005 04:49

Re: strings aus txt file lesen
 
damn..also kein anderer text darf in die file ?

Thanatos81 27. Jun 2005 13:01

Re: strings aus txt file lesen
 
Nur als Kommentarzeilen, die beginnen mit einem ;
Fang jetzt aber nicht an, die Kommentarzeilen zur Speicherung zu missbrauchen, da wirst du nicht glücklich mit werden...

agm65 26. Aug 2005 02:39

Re: strings aus txt file lesen
 
wollte nochmal allen danken , die mir geholfen haben ...ist zwar länger her aber ich sehe grade, dass ich nichts mehr dazu geschrieben haben ..also nochmal jungs....danke euch allen !


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:47 Uhr.

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