Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Probleme mit StringList und for schleifen (https://www.delphipraxis.net/48739-probleme-mit-stringlist-und-schleifen.html)

agm65 29. Jun 2005 20:19


Probleme mit StringList und for schleifen
 
guten abend leute...
hab mal wieder ne nachschicht vor mir, hoffentlich sind heute nacht genug online ;) !
nun zu meinem problem:
also ich habe 2 stringlist global definiert

Delphi-Quellcode:
var
sl: TStringList;
sl2: TStringList;


tform1.formcreate;
begin
sl:=TStringList.Create;
sl2:=TStringList.Create;

//file 1 von 49
sl.Add(ExtractFilePath(ParamStr(0)) + 'dir\file1.txt');
sl2.Add('ini.ReadString(''File1'', ''KEY'','''')');

//file 2 von 49
sl.Add(ExtractFilePath(ParamStr(0)) + 'dir\file2.txt');
sl2.Add('ini.ReadString(''File1'', ''KEY'','''')');

end;

tform.button1click;
var
i:integer;
begin
 try
  for i := 0  to sl.count -1 do
     begin
     sl.LoadFromFile(sl.Strings[i]));
     edit1.text := sl.count;
     sl.clear;
     end;
end;
ich bekomme ne fehlermeldung, dass ich nen maximum wert überschritten habe ?
aber wieso ? habe schon sehr viel ausprobiert ....ca 8 stunden ....erbitte hilfe !

[edit=Sharky]Code-Tags durch Delphi-Tags ersetzt. Mfg, Sharky[/edit]

Sharky 29. Jun 2005 20:22

Re: Probleme mit StringList und for schleifen
 
Zitat:

Zitat von agm65
.
.
Code:
  for i := 0  to sl.count -1 do
     begin
     sl.LoadFromFile(sl.Strings[i]));
.
end;

Du darfst nicht in einer Schleife welche die Items deiner StringList sl durchläuft diese verändern.
Durch das sl.LoadFromFile ändert sich ja die Anzahl der "Zeilen" in der StringListe!

agm65 29. Jun 2005 20:29

Re: Probleme mit StringList und for schleifen
 
also erstelle ich für diese procedure einen neue stringliste ?
Code:
tform.button1click;
var
i:integer;
sl3: TStringList;
begin
sl3.create;
try
  for i := 0  to sl.count -1 do
     begin
     sl3.LoadFromFile(sl.Strings[i]));
     edit1.text := sl.count;
     sl.clear;
     end;
end;
macht leider auch fehler !

malo 29. Jun 2005 20:31

Re: Probleme mit StringList und for schleifen
 
Delphi-Quellcode:
for i := 0  to sl.count -1 do
     begin
     sl.LoadFromFile(sl.Strings[i]));
     edit1.text := sl.count;
     sl.clear;
     end;
Hier fällt mir außerdem auf, dass am Ende jedes Schleifendurchlauf die StringListe geleert wird, wodurch beim nächsten Aufurf nicht mehr von sl.Strings[i] gelesen werden kann. Logischerweise ;)

Nachtrag: Warum speicherst du nicht Sl.Count - 1 in einer Variableß

//edit: Edit1.Text := sl.Count funktioniert auch nicht, da du ja einen Integerwert in einen String schreiben willst. Wenn du das machen willst, musst du zuvor mit Delphi-Referenz durchsuchenIntToStr Sl.Count umwandeln (wenn du wirklich die Zahl reinschreiben willst).

Sharky 29. Jun 2005 20:31

Re: Probleme mit StringList und for schleifen
 
Zitat:

Zitat von agm65
also erstelle ich für diese procedure einen neue stringliste ?

Was möchtest Du denn machen? So wie der Code aussieht hast Du in einer StringListe Dateinamen und möchtest jetzt wissen wie viele Zeilen jede dieser Dateien hat?

100nF 29. Jun 2005 20:33

Re: Probleme mit StringList und for schleifen
 
hi,

also ich stimme erstens mal Sharky zu.
aber noch was:
Zitat:

edit1.text := sl.count;
das geht doch gar nicht!
richtig wäre es so:
Delphi-Quellcode:
edit1.text := inttostr(sl.count);
erklär mal dein vorhaben etwas genauer...

P.S. eventuell musst du eine dritte stringlist verwenden, um die dateinamen zu speichern.

100nF 29. Jun 2005 20:35

Re: Probleme mit StringList und for schleifen
 
mit einer dritten stringlist müsste das etwa so aussehen:
Delphi-Quellcode:
s3.strings := s1.strings;
for i := 0  to s3.count -1 do
     begin
     sl.LoadFromFile(s3.Strings[i]));
     edit1.text := sl.count;
     sl.clear;
     end;

agm65 29. Jun 2005 20:37

Re: Probleme mit StringList und for schleifen
 
genau wartet mal ich behebe die dummen fehler !

malo 29. Jun 2005 20:39

Re: Probleme mit StringList und for schleifen
 
Zitat:

Zitat von urbanbruhin
mit einer dritten stringlist müsste das etwa so aussehen:
Delphi-Quellcode:
s3.strings := s1.strings;
for i := 0  to s3.count -1 do
     begin
     sl.LoadFromFile(s3.Strings[i]));
     edit1.text := sl.count;
     sl.clear;
     end;

Warum denn so?

Da wird doch nur unnötig Speicher verbraucht, weil eine Stringliste komplett kopiert wird. Man könnte ja gleich die Daten aus s1 in s3 speichern. So, wie es agm65 auch im Beispiel gepostet hat.


PS: Doppelposts sind ja nicht nötig, oder? Du kannst auch deine Beiträge editieren ;)

agm65 29. Jun 2005 20:43

Re: Probleme mit StringList und for schleifen
 
Code:
tform.button1click;
var
i:integer;
sl3: TStringList;
begin
sl3.create;
try
  for i := 0  to sl.count -1 do
     begin
     sl3.LoadFromFile(sl.Strings[i]));
     edit1.text := inttostr(sl3.count);
     sl3.clear;
     end;
end;
das macht auch fehler, exception zugriffs verletzung

malo 29. Jun 2005 20:45

Re: Probleme mit StringList und for schleifen
 
2 Bitten:

1. Bitte verwende anstelle der [ code ] -Tags die [ delphi ]-Tags ;)

2. Nenne uns doch auch mal die Fehler :roll:

//edit: Lies dir mal meine Posts genau durch. Da steht, wo dein Fehler auftritt.

Sharky 29. Jun 2005 20:45

Re: Probleme mit StringList und for schleifen
 
Ähmmm....

das darf überhaupt nicht Compiliert werden!!!

sl3.create gibt es doch nicht.
Schaue Dir mal diesen Code von mir an:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  slFileNames := TStringList.Create;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  slFileNames.Free;
end;

procedure TForm1.CounteLines(const aFileName: string; aOutPut: TStrings);
var
  ndx:     integer;
  slCount: TStringList;
begin
  slCount := TStringList.Create;
  try
    slFileNames.LoadFromFile(aFileName);
    for ndx := 0 to Pred(slFileNames.Count) do
    begin
      slCount.LoadFromFile(slFileNames.Strings[ndx]);
      aOutPut.Add(IntToStr(slCount.Count));
    end;
  finally
    slCount.Free;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  FileName : string;
begin
  FileName := 'Name der Datei mit der Liste';
  CounteLines (FileName,ListBox1.Items);
end;

P.S.: Verwende doch bitte die Delphi-Tags und nicht die Code-Tags.

Luckie 29. Jun 2005 20:47

Re: Probleme mit StringList und for schleifen
 
Zitat:

Zitat von agm65
das macht auch fehler, exception zugriffs verletzung

W E L C H E denn?!?!?!!! Das kann doch nicht so schwer sein mal zu posten, was du mit dem Code bezweckst, was nicht funktioniert, eventuell auftauchende Fehlermeldungen und wie du es gerne hättest. Langsam habe ich diese ewige Nachfragerei satt. Es muss doch möglich sein mal alle relevanetn Informationen gleich im ersten Posting zu liefern.

malo 29. Jun 2005 20:51

Re: Probleme mit StringList und for schleifen
 
Zitat:

Zitat von Luckie
Zitat:

Zitat von agm65
das macht auch fehler, exception zugriffs verletzung

W E L C H E denn?!?!?!!! Das kann doch nicht so schwer sein mal zu posten, was du mit dem Code bezweckst, was nicht funktioniert, eventuell auftauchende Fehlermeldungen und wie du es gerne hättest. Langsam habe ich diese ewige Nachfragerei satt. Es muss doch möglich sein mal alle relevanetn Informationen gleich im ersten Posting zu liefern.

Naja, das Problem dabei sehe ich eher darin, dass manche Posts nicht oder nur teilweise gelesen werden. Ich habe nämlich grade schon geschrieben, wo der Fehler liegt.

Freundlicherweise verweise ich nochmal auf den Post: http://www.delphipraxis.net/internal...=390097#390097

agm65 29. Jun 2005 20:59

Re: Probleme mit StringList und for schleifen
 
luckie, du das hast recht, es tut mir leid !
ich werde mir mühe geben mehr infos in meine posts zu packen !

Delphi-Quellcode:
  sl3: TStringList;
  i: integer;
begin
  sl3.Create;
  try

    for i := 0  to sl.count-1 do
     begin
     memo1.Lines.Add(sl.Strings[i]);    
     sl3.LoadFromFile(sl.strings[i]);  
     sl3.clear;                                                  
     end;
ich bekomme eine exception der klasse EAccessViolent, und es wird nicht compiliert !

malo 29. Jun 2005 21:05

Re: Probleme mit StringList und for schleifen
 
Zitat:

Zitat von agm65
aber komisch ist, dass er die strings in die memo packt, das geht !

Die beiden Codezeilen führen ja auch verschiedene Befehle aus!!!

Das eine ist LoadFromFile. Da wird ein Dateipfad angegeben und daraus werden dann die Strings gelesen. Das mit dem Memo speichert doch nur die StringListen-Einträge in dem Memo. Da könnte man aber auch folgendes machen:

Delphi-Quellcode:
Memo1.Text := sl.Text;

100nF 29. Jun 2005 21:12

Re: Probleme mit StringList und for schleifen
 
probiers mal so:
Delphi-Quellcode:
tform.button1click;
var
i:integer;
sl3: tstringlist;
begin
sl3 := tstringlist.create;
sl3.strings := sl.strings;
try
  for i := 0  to sl3.count -1 do
     begin
     sl.clear;
     sl.LoadFromFile(sl3.Strings[i]));
     edit1.text := inttostr(sl.count);
     end;
end;

agm65 29. Jun 2005 21:20

Re: Probleme mit StringList und for schleifen
 
man ich habs !! DANKE Sharky !
noch ne kurze frage...wie konvertiere ich tstrings in strings ? oder integer in tstring ?

malo 29. Jun 2005 21:22

Re: Probleme mit StringList und for schleifen
 
Zitat:

Zitat von agm65
man ich habs !! DANKE Sharky !
noch ne kurze frage...wie konvertiere ich tstrings in strings ? oder integer in tstring ?

TString in String: Wie soll das gehen?

Du kannst die Eigenschaft Text von TString verwenden.
Delphi-Quellcode:
s := StringList.Text;
Das gibt dir den gesamten Inhalt der StringListe als String wieder.

Integer in TString versteh ich nicht :gruebel:

Wofür soll das gut sein?

100nF 29. Jun 2005 21:23

Re: Probleme mit StringList und for schleifen
 
Zitat:

wie konvertiere ich tstrings in strings ?
string := strings.text;
Zitat:

oder integer in tstring ?
string := inttostr(integer);

agm65 29. Jun 2005 21:27

Re: Probleme mit StringList und for schleifen
 
Delphi-Quellcode:
listview1.Items[i].SubItems:= (inttostr(slLoadFiles.count));
hier sagt er mir inkompatible typen tstring und string !

Sharky 29. Jun 2005 21:29

Re: Probleme mit StringList und for schleifen
 
Zitat:

Zitat von agm65
wie konvertiere ich tstrings in strings ? oder integer in tstring ?

Es passt zwar nicht zur Frage des Threads...

TStrings ist eine Abstrakte Klasse die eigentlich überhaupt nichts kann. Es ist aber der Vorfahre von vielen "String-Klassen".

TMemo.Lines -> TStrings
TListBox.Items -> TStrings
TStringList.Items -> TStrings

In meinem Code siehst Du ja das ich z.B. eine TListBox verwendet habe um die Anzahl der Zeilen anzuzeigen.
Delphi-Quellcode:
aOutPut.Add(IntToStr(slCount.Count));
Mit dieser Zeile wird einfach die Anzahl (slCount.Count) in einen String gewandelt und dann als neue "Zeile" in ein "TStrings" (in diesem Falle ist es TListBox.Items) angehängt.

agm65 29. Jun 2005 21:32

Re: Probleme mit StringList und for schleifen
 
und wie würde das jetzt bei meinem konkreten beispiel aussehen ?

100nF 29. Jun 2005 21:35

Re: Probleme mit StringList und for schleifen
 
Zitat:

Zitat von agm65
Delphi-Quellcode:
listview1.Items[i].SubItems:= (inttostr(slLoadFiles.count));
hier sagt er mir inkompatible typen tstring und string !

probiers mal so:
Delphi-Quellcode:
listview1.Items[i].SubItems[0]:= (inttostr(slLoadFiles.count));

agm65 29. Jun 2005 21:38

Re: Probleme mit StringList und for schleifen
 
lol...womit wir wieder bei den maximumindex fehlern sind....

ich bin penner teste es echt :) !

Sharky 29. Jun 2005 21:55

Re: Probleme mit StringList und for schleifen
 
Hmmm... was hälst Du denn davon Dir mal die Hilfe für die Eigenschaften die Du verwenden möchte durchzulesen.

Lannes 29. Jun 2005 22:10

Re: Probleme mit StringList und for schleifen
 
Hallo,
Zitat:

Zitat von agm65
lol...womit wir wieder bei den maximumindex fehlern sind....

und dazu hatte ich Dir in dem folgenden Beitrag schon eine Antwort gegeben:
http://www.delphipraxis.net/internal...=389672#389672


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:04 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