Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Loadfile.. scan for block.. add to TStringlist (https://www.delphipraxis.net/11305-loadfile-scan-block-add-tstringlist.html)

Skyruner2 3. Nov 2003 21:09


Loadfile.. scan for block.. add to TStringlist
 
ok es wird ein file geladen mit TXT inhalt.
der gesamte text des files wird in eine TStringList hinzugeführt, und dann wird nach einem block gesucht.
also:
Delphi-Quellcode:
var
  filedata, datacontent : tStringlist;
  databegin, dataend :integer;
begin
If openDialog1.Files = nil
then showmessage('no file loaded dumbass')
else
  begin
  filedata.Create;
  filedata.AddStrings(opendialog1.Files);
  databegin:=filedata.IndexOf(edit1.Text)+1;
  dataend:=filedata.IndexOf(edit2.Text)-1;
das file:

Code:
bla bla bla haha jajaj..
nööö dummer text.. bla bla bla
:::Begin:::
uhhh ja..
dass ist interesant
dass will ich haben
:::End:::
noch
mehr
text
edit1.text = :::Begin:::
edit2.text = :::End:::

gut jetzt dass problem:
wie kann ich alles wass zwichen :::begin::: und :::end::: in die "datacontent" TString liste eifügen?


//many thanks in advance :D

mr2 3. Nov 2003 21:37

Re: Loadfile.. scan for block.. add to TStringlist
 
Zitat:

Delphi-Quellcode:
  filedata.Create;
  filedata.AddStrings(opendialog1.Files);

wird Dir um die Ohren fliegen. Probiers mal mit
Delphi-Quellcode:
  filedata := TStringList.Create;
  try
    filedata.LoadFromFile(opendialog1.FileName);
    while (Pos(':::Begin:::', filedata[0]) = 0)
      do filedata.Delete(0);
    while (Pos(':::End:::', filedata[Pred(filedata.Count)]) = 0)
      do filedata.Delete(Pred(filedata.Count));
    // eigentliche Verarbeitung der Daten (geht jetzt direkt in FileData - kopieren ist unnötig)
  finally
    FreeAndNil(filedata);
  end;
CU mr2

Skyruner2 4. Nov 2003 12:52

Re: Loadfile.. scan for block.. add to TStringlist
 
danke erstmals.. doch ein problem:

in dem file wird es mehrere solcher positionen geben.

ich denke mal mit einem anderen anfang und ende, wie z.b. :::begin1::: :::end1::: :::begin2::: :::end2::: usw. (wede ich verscheinlich mit integer to string conversion machen oder so...) daher ist kopeiren nicht unnötig - sorry hätte ich ehr sagen sollen.



und ne nebenfrage:

warum würde
Delphi-Quellcode:
  filedata.Create;
  filedata.AddStrings(opendialog1.Files);
net so funktioniren bzw mir um di ohren fliegen?

scp 4. Nov 2003 13:01

Re: Loadfile.. scan for block.. add to TStringlist
 
Zitat:

Zitat von Skyruner2
und ne nebenfrage:

warum würde
Delphi-Quellcode:
  filedata.Create;
  filedata.AddStrings(opendialog1.Files);
net so funktioniren bzw mir um di ohren fliegen?

opendialog1.Files enthält nicht die Zeilen einer Textdatei, sondern eine Liste der im OpenDialog ausgewählten Dateien (Wenn Option ofAllowMultiselect aktiviert ist).

Ausserdem ist filedata.Create nicht möglich, da filedata ja noch nich erstellt ist und deshalb auch keine funktionierende .create hat ( ein Teufelskreis :-) ).

Skyruner2 4. Nov 2003 13:11

Re: Loadfile.. scan for block.. add to TStringlist
 
ok.. danke!

zum kopieren:
vieleicht mit einer for to schleife?

mr2 4. Nov 2003 17:45

Re: Loadfile.. scan for block.. add to TStringlist
 
Hallo,

also erstmal solltest Du Objektinstanzen immer mit T<irgendwas>.Create erzeugen:

Delphi-Quellcode:
  filedata := TStringList.Create;
Der Rest sollte so funktionieren:

Delphi-Quellcode:
  datacontent := nil;
  filedata := nil;
  try
    datacontent := TStringList.Create;
    filedata := TStringList.Create;
    filedata.LoadFromFile(opendialog1.FileName);
    repeat
      i := 0;
      while (Pos(':::Begin:::', filedata[i]) = 0) and (i <= Pred(filedata.Count))
        do Inc(i);
      Inc(i);
      while (Pos(':::End:::', filedata[i]) = 0) and (i <= Pred(filedata.Count)) do begin
        datacontent.Add(filedata[i]);
        Inc(i);
      end;
    until (i >= Pred(filedata.Count));
    // eigentliche Verarbeitung der Daten
  finally
    FreeAndNil(filedata);
    FreeAndNil(datacontent);
  end;
CU mr2

Skyruner2 4. Nov 2003 21:23

Re: Loadfile.. scan for block.. add to TStringlist
 
t(...).create - hmm die einen nehmen es raus die anderen lassen es drin...


und dann ist da noch:

[quote="Skyruner2"]doch ein problem:

in dem file wird es mehrere solcher positionen geben.

ich denke mal mit einem anderen anfang und ende, wie z.b. :::begin1::: :::end1::: :::begin2::: :::end2::: usw. (wede ich verscheinlich mit integer to string conversion machen oder so...) daher ist kopeiren nicht unnötig - sorry hätte ich ehr sagen sollen.
quote]

mr2 5. Nov 2003 19:32

Re: Loadfile.. scan for block.. add to TStringlist
 
Hallo,

ich glaube nicht, dass jemand das T... vor dem Create weglässt.
Für das andere Problem brauchst Du einfach nur ein zweite Variable (j) jeweils nur einmal in der Schleife zu Incremetieren und mittels IntToStr(j) den String dynamisch zusammen zu bauen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:51 Uhr.

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