Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   mehrere stringlists hintereinander anhängen (https://www.delphipraxis.net/119590-mehrere-stringlists-hintereinander-anhaengen.html)

cRayZo 28. Aug 2008 20:09


mehrere stringlists hintereinander anhängen
 
abend ;)
wie kann ich verschiedene stringlists so wie lines.add einfach hintereinander in eine weitere stringlist einfügen?
also in etwa so:
Delphi-Quellcode:
var sl1, sl2, sl3, sl4, slfinish:TStringlist
begin
slfinish:=sl1+sl2+sl3+sl4;

mkinzler 28. Aug 2008 20:12

Re: mehrere stringlists hintereinander anhängen
 
Delphi-Quellcode:
slFinish.AddStrings( sl1);

cRayZo 28. Aug 2008 20:22

Re: mehrere stringlists hintereinander anhängen
 
das funktioniert irgendwie nicht..

es gibt nur sl.add und sl.addobject
..?

mkinzler 28. Aug 2008 20:24

Re: mehrere stringlists hintereinander anhängen
 
Dann ist die Methode wohl erst mit einer späteren Delphiversion gekommen;
Delphi-Quellcode:
slfinish.CommaText:=sl1.CommaText+sl2.CommaText+sl3.CommaText+sl4.CommaText;

cRayZo 28. Aug 2008 20:37

Re: mehrere stringlists hintereinander anhängen
 
Zitat:

Zitat von mkinzler
Dann ist die Methode wohl erst mit einer späteren Delphiversion gekommen;
Delphi-Quellcode:
slfinish.CommaText:=sl1.CommaText+sl2.CommaText+sl3.CommaText+sl4.CommaText;

also so habe ich das jetzt mal verscuht..
hier mein Code:
Delphi-Quellcode:
procedure Tdrucken.Button3Click(Sender: TObject);
var
sl, sl2, sl3, sl4, sl5, sl6, slfinish: TStringList;
F: textfile;
zeilennr: integer;
vokabel,Loesung:string;
  RetVal: Integer;
begin
sl:=TStringList.Create;
sl2:=TStringList.Create;
sl3:=TStringList.Create;
sl4:=TStringList.Create;
sl6:=TStringList.Create;
sl6:=TStringList.Create;
Stringlistx:=sl;



if checkbox1.Checked=True then
        begin
        AssignFile(F,'c:\Vokabeltrainer\Vokabeln\ungeuebt.txt');
        try sl.LoadFromFile('c:\Vokabeltrainer\Vokabeln\ungeuebt.txt'); except end;
        end;
if checkbox2.Checked=True then
        begin
        AssignFile(F,'c:\Vokabeltrainer\Vokabeln\nicht gekonnt.txt');
        try sl2.LoadFromFile('c:\Vokabeltrainer\Vokabeln\nicht gekonnt.txt'); except end;
        end;
if checkbox3.Checked=True then
        begin
        AssignFile(F,'c:\Vokabeltrainer\Vokabeln\gelernt.txt');
        try sl3.LoadFromFile('c:\Vokabeltrainer\Vokabeln\gelernt.txt'); except end;
        end;
if checkbox4.Checked=True then
        begin
        AssignFile(F,'c:\Vokabeltrainer\Vokabeln\gut gelernt.txt');
        try sl4.LoadFromFile('c:\Vokabeltrainer\Vokabeln\gut gelernt.txt'); except end;
        end;
if checkbox5.Checked=True then
        begin
        AssignFile(F,'c:\Vokabeltrainer\Vokabeln\sehr gut gelernt.txt');
        try sl5.LoadFromFile('c:\Vokabeltrainer\Vokabeln\sehr gut gelernt.txt'); except end;
        end;
if checkbox6.Checked=True then
        begin
        AssignFile(F,'c:\Vokabeltrainer\Vokabeln\gut gelernt.txt');
        try sl6.LoadFromFile('c:\Vokabeltrainer\Vokabeln\gut gelernt.txt'); except end;
        end;

slfinish.CommaText:=sl.CommaText+sl2.CommaText+sl3.CommaText+sl4.CommaText+sl5.CommaText+sl6.CommaText;
es startet ohne Probleme, aber wenn ich bei den Checkboxes etwas anklicke und dann auf Button3 gehe, kommt wie gesagt die Zugriffsverletzung
kann es sein, dass die fehlermeldung kommt, weil sl.Commatext hinzugefügt wird, der nicht eistiert?

mkinzler 28. Aug 2008 20:40

Re: mehrere stringlists hintereinander anhängen
 
Weisse des Stringlisten mal jeweils einen Leerstring zu.
Ansonsten schau mal im Debugger, in welcher Zeile der Fehler auftritt
Btw.: Besser
Delphi-Quellcode:
sl, sl2, sl3, sl4, sl5, sl6, slfinish: TStrings;

Benedikt 28. Aug 2008 20:51

Re: mehrere stringlists hintereinander anhängen
 
Nabend,

öhm, überseh ich was oder createst du slfinish überhaupt nicht?

MfG Benedikt

cRayZo 28. Aug 2008 21:01

Re: mehrere stringlists hintereinander anhängen
 
Zitat:

Zitat von Benedikt
Nabend,

öhm, überseh ich was oder createst du slfinish überhaupt nicht?

MfG Benedikt

:D:D:D:D:D:D

jo..^^ du hattest Recht..
also ich hab den Code jetzt wie folgt, aber er liest manche stringlists nur in das stringgrid ein, wenn er auch andere mit einliest.
Zum Beispiel:
wenn nur ckeckbox1 activiert ist zeigt er nur die überschrift an im stringgrid, nämlcih "Übersetzung", und "Vokabel" der inhalt erscheint nicht..
aber
wenn checkbox1 und checkbox2 gleichzeitig aktiviert sind, dann werden beide inhalte auch angezeigt. uswusw woran kann das liegen?

Delphi-Quellcode:
procedure Tdrucken.Button3Click(Sender: TObject);
var
sl, sl2, sl3, sl4, sl5, sl6, slfinish: TStringlist;
F: textfile;
zeilennr: integer;
vokabel,Loesung:string;
  RetVal: Integer;
begin
sl:=TStringList.Create;
sl2:=TStringList.Create;
sl3:=TStringList.Create;
sl4:=TStringList.Create;
sl5:=TStringList.Create;
sl6:=TStringList.Create;
slfinish:=TStringList.Create;



if checkbox1.Checked=True then
                begin
                        AssignFile(F,'c:\Vokabeltrainer\Vokabeln\ungeuebt.txt');
                        try sl.LoadFromFile('c:\Vokabeltrainer\Vokabeln\ungeuebt.txt'); except end
                end
                else sl.Text:='';

if checkbox2.Checked=True then
                begin
                        AssignFile(F,'c:\Vokabeltrainer\Vokabeln\nicht gekonnt.txt');
                        try sl2.LoadFromFile('c:\Vokabeltrainer\Vokabeln\nicht gekonnt.txt'); except end
                end
                else sl2.Text:='';

if checkbox3.Checked=True then
                begin
                        AssignFile(F,'c:\Vokabeltrainer\Vokabeln\gelernt.txt');
                        try sl3.LoadFromFile('c:\Vokabeltrainer\Vokabeln\gelernt.txt'); except end
                end
                else sl3.Text:='';

if checkbox4.Checked=True then
                begin
                        AssignFile(F,'c:\Vokabeltrainer\Vokabeln\gut gelernt.txt');
                try sl4.LoadFromFile('c:\Vokabeltrainer\Vokabeln\gut gelernt.txt'); except end
                end
                else sl4.Text:='';

if checkbox5.Checked=True then
                begin
                        AssignFile(F,'c:\Vokabeltrainer\Vokabeln\sehr gut gelernt.txt');
                        try sl5.LoadFromFile('c:\Vokabeltrainer\Vokabeln\sehr gut gelernt.txt'); except end
                end
                else sl5.Text:='';

if checkbox6.Checked=True then
                begin
                AssignFile(F,'c:\Vokabeltrainer\Vokabeln\gut gelernt.txt');
                        try sl6.LoadFromFile('c:\Vokabeltrainer\Vokabeln\gut gelernt.txt'); except end
                end
        else sl6.Text:='';

slfinish.CommaText:=sl.CommaText+sl2.CommaText+sl3.CommaText+sl4.CommaText+sl5.CommaText+sl6.CommaText;


Stringgrid1.RowCount:=slfinish.Count;
        Stringgrid1.Cells[1,0]:='Vokabel'    ;
        Stringgrid1.Cells[0,0]:='Übersetzung';
        for zeilennr:=0 to slfinish.Count-1 do
        begin
        splitstr(slfinish.Strings[zeilennr],'=',Vokabel, Loesung);
        Stringgrid1.Cells[1,zeilennr+1]:=Vokabel;
        Stringgrid1.Cells[0,zeilennr+1]:=Loesung;
        end;
Stringlistx:=slfinish;

end;

cRayZo 28. Aug 2008 21:30

Re: mehrere stringlists hintereinander anhängen
 
aaaalso

ich habs mir selbst beantwortet, poste das hier aber, weil es vielleicht auch für andere wichtig ist:
Zitat:

Zitat von mkinzler
Dann ist die Methode wohl erst mit einer späteren Delphiversion gekommen;
Delphi-Quellcode:
slfinish.CommaText:=sl1.CommaText+sl2.CommaText+sl3.CommaText+sl4.CommaText;

das ist korrekt.. ABER
die letzte Zeile von sl und die erste Zeile von sl2 werden in einer Zusammengefasst!
man sollte also zwischendurch immer ein
Delphi-Quellcode:
slfinish.add('')
einfügen, um einen "Zeilenumbruch" zu erzeugen, damit jede Zeile auch wirklich einzeln vorliegt

danke trotzdem an euch alle, habt mir sehr geholfen!

sx2008 28. Aug 2008 22:43

Re: mehrere stringlists hintereinander anhängen
 
Auwa, das ist aber umständlich.
Du brauchst doch keine 6 Stringlisten, sondern nur 2.
Delphi-Quellcode:
// ungetestet
// diese Procedur hängt den Inhalt einer Datei an ein TStrings-Objekt an
procedure AppendFileToStrings(const filename:string; list:TStrings);
var
  tmp : TStringList;
begin
  if FileExists(filename) then
  begin
    tmp := TStringList.Create;
    tmp.LoadFromFile(filename);
    list.AppendStrings(tmp);
    tmp.Free;
  end;
end;

...
if checkbox3.Checked then // nicht auf =True abfragen !
  // ein eleganter Einzeiler :-)
  AppendFileToStrings('c:\Vokabeltrainer\Vokabeln\gelernt.txt', slfinish);
...


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:55 Uhr.
Seite 1 von 2  1 2      

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