Autor Beitrag
foxy
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 814

Ubuntu, Gentoo
C++, PHP, Java, Ruby, Perl (Eclipse)
BeitragVerfasst: Mo 04.11.02 11:41 
Sers Leute ich brauche hilfe =)

also zu meine Problem ... meine textdatei hat 9000 Zeilen und ich will das so handhaben das wenn ich einen string eingebe
bsp: 12:15 und einen 2. bsp: 12:17 das er alle zeilen auswertet und in einer dbmemo ausgibt aber jetzt kommts =)
dazwischen können auch noch andere Zeile sein also die mit 12:16 die will ich aber auch in meiner memo haben ... wie bekomme ich die da rein ich schreibe mal quellcode hin wie weit ich bin ...
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
with dbmemo1 do
      scrollBars:=SSboth;
      ReSet(f);     //Datei zum Lesen öffnen
      DBMemo1.Clear;      //Memo leeren
      ZNr:=0;
      Repeat
        ZNr:=ZNr+1;
        ReadLn(f,Zeile); //Zeile lesen
        If Pos(EditZeit.Text,Zeile)>0 Then 
         begin
         DBMemo1.Lines.Add( 'Zeilennr.: '+IntToStr(ZNr)+':  '+Zeile);
         repeat
         ZNr:=ZNr+1;
         Readln(f,Zeile);
            DBMemo1.Lines.Add( 'Zeilennr.: '+IntToStr(ZNr)+':  '+Zeile );
            until Pos(Editzeit.Text,Zeile)=0;
            end;
        If Pos(EditZeit2.Text,Zeile)>0 then
        DBMemo1.Lines.Add( 'Zeilennr.: '+IntToStr(ZNr)':  '+Zeile );
        Until EOF(f);
        showmessage(copie(DBMemo1.lines.strings[r1],1,38));
        CloseFile(f);

aber irgendwie gibt der mir dann noch eine zeile dazwsichen aus und beendet dann die schleife an was liegt das BITTE UM HILLLLFEEEEEE =)
danke
Raphael82
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 67



BeitragVerfasst: Mo 04.11.02 23:57 
Zu deinem Code: Nicht böse sein aber... :(

So wie ich es verstanden habe willst du in der Datei, zeile für Zeile nach 2 Strings suchen lassen (12:15 bzw 12:17 als Beispiel). Wenn einer der Strings in der jeweiligen Zeile enthalten ist soll die Zeile in einem Memo ausgegeben werden. Was dazwischen liegt willst du nicht haben.
So hab ichs verstanden. So sollte das gehen: (Code ist ungetestet und nur eben so hingepfuscht!)

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
function DatenLesen(DateiName,sub1,sub2:string):Boolean;
var Datei : TextFile;
      Zeile : String;
      i : integer;
begin
i:=1;
Result := false;
 AssignFile(Datei, DateiName);
  if not FileExists(DateiName) then exit;
   DBMemo1.Clear;
  try
   ReSet(Datei);
    while not eof(Datei) do begin
     ReadLn(Datei,s);
      if pos(sub1,s)>0 then begin
       DBMemo1.Lines.Add('Zeilennr. : ' +IntToStr(i)+':  '+s);
       Result := true;
      end;  
      if pos(sub2,s)>0 then begin
       DBMemo1.Lines.Add('Zeilennr. : ' +IntToStr(i)+':  '+s);
       Result := true;
      end;   
     inc(i);
   end;
  except
   ShowMessage('Fehler beim lesen der Datei!');  
  end;
end;


An "DateiName" übergibst du den DateiNamen als String.
"sub1" und "sub2" sind die 2 Strings nach denen gesucht werden soll.
Die Funktion gibt "true" zutück wenn die Datei wenigstens einen der Strings beinhaltet und "false" wenn dem nicht so ist!

MfG, Raphael

_________________
Share your knowledge to receive perfection!
foxy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 814

Ubuntu, Gentoo
C++, PHP, Java, Ruby, Perl (Eclipse)
BeitragVerfasst: Di 05.11.02 09:42 
emm naja fast =) ... das iss ja gerade mein problem ich will dazwichen das haben das andere geht ja wunderbar .... aber dazwischen die zeilen brauch ich auch :cry: un da bekomm ich nur eine zeile dann bricht er ab ab aber sonst hat du das prinzip verstanden :lol:
Raphael82
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 67



BeitragVerfasst: Di 05.11.02 14:46 
Auch kein Problem:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
function DatenLesen(DateiName,sub1,sub2:string):Boolean; 
var Datei : TextFile; 
      Zeile : String; 
      i : integer; 
begin 
i:=1; 
Result := false; 
AssignFile(Datei, DateiName); 
  if not FileExists(DateiName) then exit; 
   DBMemo1.Clear; 
  try 
   ReSet(Datei); 
    while not eof(Datei) do begin 
     ReadLn(Datei,s); 
      if pos(sub1,s)>0 then begin 
      Result := true;
       DBMemo1.Lines.Add('Zeilennr. : ' +IntToStr(i)+':  '+s); 
       repeat
        ReadLn(Datei,s);
        DBMemo1.Lines.Add('Zeilennr. : ' +IntToStr(i)+':  '+s);
        inc(i); 
       until pos(sub2,s)>0;
      end;  
     inc(i); 
   end; 
  except 
   ShowMessage('Fehler beim lesen der Datei!');  
  end; 
end;


Wenn es sicher ist, dass beide SubStrings nur einmal in der Datei vorkommen, kannst du den Code um eine Schleife kürzen.

MfG, Raphael

_________________
Share your knowledge to receive perfection!