StringList aus Memo füllen und umgekehrt
spacer
Autor Nachricht
bf109g.01
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 84



BeitragVerfasst: Di 23.08.11 17:51 
Hallo, ich möchte mit meine Speichern-Prozedur die Zeilen eines Memos in eine Stringlist übertragen, das dann speichern und beim wieder auslesen, die Zeilen aus der stringlist wieder ins Memo schreiben:
meine Lösung sieht so aus:

ausblenden Delphi-Quelltext markieren
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure TFFragen.Frage_speichern(Stelle:integer);
var I:Integer;
begin
for i := 0 to Fr_MLoesung.Lines.Count - 1 do // Lösungstext
AFragen[Stelle].Loesung[i]:=Fr_MLoesung.Lines[i];
end;

procedure TFFragen.Frage_laden(Stelle:Integer);
var I:Integer;
begin
for i := 0 to AFragen[Stelle].Loesung.Count - 1 do // Lösungstext
Fr_MLoesung.Lines.add(AFragen[Stelle].Loesung[i]);
end;

Beides gibt Fehlermeldungen über Zugriffsverletzungen und ich sehe einfach gerade nicht, wo der Fehler liegt. Vermutl überschreitet irgendwo die Schleife die Dateiränder...


Moderiert von user profile iconNarses: Topic aus VisualCLX (Component Library for Cross Platform) verschoben am Di 23.08.2011 um 18:52
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.


Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.
colaka
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic star
Beiträge: 159
Erhaltene Danke: 2

Win XP
Delphi 2005 Prof.
BeitragVerfasst: Di 23.08.11 21:42 
Hallo,

die Fehlermeldung kommt möglicherweise davon, daß Du die Stringliste nicht erzeugt hast. Außerdem kannst Du Dir die Schleife sparen und den Inhalt direkt übergeben.
ausblenden Delphi-Quelltext markieren
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure TForm1.Button1Click(Sender: TObject);
begin
Liste := TStringlist.Create;
Liste.AddStrings(Memo1.Lines);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Memo1.Lines.AddStrings(Liste);
end;


Gruß Ebi
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Andreas L.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic starofftopic starofftopic star
Beiträge: 1671
Erhaltene Danke: 14

Windows Vista Home Premium 32Bit
RAD Studio 2009 Pro
BeitragVerfasst: Mi 24.08.11 08:47 
Oder:
ausblenden Delphi-Quelltext markieren
1:
  Liste.Text := memo1.Lines.Text;


Und wenn es nur um speichern und laden geht:
ausblenden Delphi-Quelltext markieren
1:
2:
  Memo1.Lines.LoadFromFile('C:\Datei.txt');
Memo1.Lines.SaveToFile('C:\Datei.txt');
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Moderator
Beiträge: 8118
Erhaltene Danke: 251

Win XP, Win 7
D7 PE, RAD Studio 2009 Professional
BeitragVerfasst: Mi 24.08.11 09:18 
user profile iconcolaka hat folgendes geschrieben Zum zitierten Posting springen:
die Fehlermeldung kommt möglicherweise davon, daß Du die Stringliste nicht erzeugt hast.

Eher nicht. Die Meldung kommt daher, dass das i-te Element einer Stringliste vor dessen Einfügen noch gar nicht existiert. Daher kann dem auch nichts zugewiesen werden. Das Hinzufügen eines Elementes geht mit Add. Der korrekt umgebaute Code würde also so lauten:
ausblenden Delphi-Quelltext markieren
1:
2:
for i := 0 to Fr_MLoesung.Lines.Count - 1 do   // Lösungstext
AFragen[Stelle].Loesung.Add(Fr_MLoesung.Lines[i]);

Die anderen Lösungen funktionieren natürlich auch, als weitere Alternative schlage ich Assign vor. ;-)

_________________
Oel ngati kameie.
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
bf109g.01 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 84



BeitragVerfasst: Do 25.08.11 15:09 
Jetzt bin ich ratlos:
Habe alle 3 Varianten durchprobiert und es gibt weiter den gleichen Fehler wie am Anfang...
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Horschdware
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 724
Erhaltene Danke: 53

Win XP professional, Win 7 Professional x64, Ubuntu
Delphi 5, Delphi 2005 Personal, Delphi 2006, Delphi XE, C++ Builder 5, PHP, SAP R/3
BeitragVerfasst: Do 25.08.11 15:15 
Bemühen wir doch mal den Debugger:
Enthält "Stelle" denn einen gültigen Wert?
Bei welchem Schleifendurchlauf bricht das Programm denn ab?

_________________
Delphi: XE - OS: Windows 7 Professional x64
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
bf109g.01 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 84



BeitragVerfasst: Do 25.08.11 16:39 
user profile iconHorschdware hat folgendes geschrieben Zum zitierten Posting springen:
Bei welchem Schleifendurchlauf bricht das Programm denn ab?

Sofort: "Zugriffsverletzung bei Adresse 00470FFS in Modul 'Test.exe'. Lesen von Adresse 00000000".
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Horschdware
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 724
Erhaltene Danke: 53

Win XP professional, Win 7 Professional x64, Ubuntu
Delphi 5, Delphi 2005 Personal, Delphi 2006, Delphi XE, C++ Builder 5, PHP, SAP R/3
BeitragVerfasst: Do 25.08.11 16:45 
Also noch im SchleifenKOPF?
Ist denn Fr_MLoesung initialisiert?

_________________
Delphi: XE - OS: Windows 7 Professional x64
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
bf109g.01 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 84



BeitragVerfasst: Do 25.08.11 17:22 
Na klar, sonste könnte ich doch gar nicht kompilieren...
So wie ich die Fehlermeldung verstehe, über- oder unterschreitet die Funktion an irgendeiner Stelle das Textende / den Anfang.
Ergibt aber bei den ^^ vorschgeschlagenen Lösungen keinen Sinn mehr, diese Erklärung....
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Horschdware
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 724
Erhaltene Danke: 53

Win XP professional, Win 7 Professional x64, Ubuntu
Delphi 5, Delphi 2005 Personal, Delphi 2006, Delphi XE, C++ Builder 5, PHP, SAP R/3
BeitragVerfasst: Do 25.08.11 17:33 
Ich glaube, du hast das falsch verstanden: Ich wollte wissen, ob das Objekt zu diesem Zeitpunkt existiert.

Wenn die Schleife schon im Kopf abbricht und gar nicht erst in den Schleifenrumpf gelangt, dann ist das hier in diesem Fall wohl die einzige plausible Lösung, dass das Objekt nicht initialisiert ist.
Ich glaube, es wäre sinnvoll, wenn du einmal deinen kompletten Code hier postest. Dann sollte das hier etwas transparenter werden.

_________________
Delphi: XE - OS: Windows 7 Professional x64
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
home home