![]() |
Memofeld in StringList einlesen?
Hallo,
zur Zeit versuche Ich mich ein wenig mit Memofeldern auseinanderzusetzen, geht eigentlich auch ganz gut vorran ;) Nur jetzt habe ich ein kleines Problem, also ich versuche, wie die Überschrifft schon sagt, den Inhalt meines Memofeldes in eine StringList einzulesen. Dies geschieht mit einer For-Schleife.
Delphi-Quellcode:
Den auskommentierten Teil bitte erstmal nicht beachten ^^
procedure TForm1.ColorButton1Click(Sender: TObject);
var text1: TStringList; i: Integer; begin text1 := TStringList.Create; for i := 0 to Memo1.Lines.Count-1 do begin text1[i] := Memo1.Lines[i]; end; {for i := 0 to Text1.count do begin Memo2.Lines[i] := text1[i]; end;} end; Also ich bekomme die Fehlermeldung: "Listenindex überschreitet das Maximum(0)". So wie ich das verstehe ist das Maximum null, aber wieso? Ich habe insgesamt 10 Lines in Memo1. Vielleicht ist auch irgendwas ziemlich simples schuld an dem Fehler, wie gesagt ist das erste mal das ich mit Memofeldern arbeite ;) mfg Alex |
Re: Memofeld in StringList einlesen?
Delphi-Quellcode:
Es sind ja noch keine Strings in der Liste, nachdem du sie instanzierst. (Create)
text1.add(Memo1.Lines[i]);
|
Re: Memofeld in StringList einlesen?
Möglichkeit 1:
Delphi-Quellcode:
Möglichkeit 2:
text1 := TStringList.Create;
for i := 0 to Memo1.Lines.Count-1 do begin text1.Add(Memo1.Lines[i]); end;
Delphi-Quellcode:
text1 := TStringList.Create;
text1.Assign(Memo1.Lines); |
Re: Memofeld in StringList einlesen?
Danke euch beiden, hatte mir echt fast die Zähne dran ausgebissen ;)
|
Re: Memofeld in StringList einlesen?
Zitat:
Dann in der DP die Suchfunktion benutzt. Und schon ist das Problem grösstenteils gelöst. Coole Sache, nicht wahr? |
Re: Memofeld in StringList einlesen?
Naja ich bins nochmal :lol:
Habe noch ein Problem ;) also es geht darum das ich meinem zweiten Memofeld nur dann die StringList (kommt aus dem ersten Memofeld) übergeben kann wenn es auch die gleiche Anzahl der Lines wie mein erstes Memofeld hat. Um das anzugleichen benutze ich
Delphi-Quellcode:
Allerdings glaub Ich das dann der Inhalt der Lines übergeben wird und nicht die Anzahl...hatte es mit Memo1.Lines.Count probiert aber naja wollte wohl nicht so wie ich ;)
Memo2.Lines := Memo1.Lines;
Habe auch grade in der Delphihilfe nachgeschaut da hatte sich mein Verdacht eigentlich schon bestätigt, also ich suche etwas womit Ich die Anzahl der Lines des zweiten Memofeldes an die des ersten Memofeldes angleichen kann. Schonmal danke im Vorraus. mfg Alex |
Re: Memofeld in StringList einlesen?
Hallo,
die kannst Du nicht 'einfach so angleichen'. Da Lines.Count readonly ist, musst Du die schon explizit hinzufügen, bzw. entfernen. Den Sinn Deines Vorhabens verstehe ich allerdings nicht nicht so ganz. Hilft Dir vielleicht die Text-Eigenschaft weiter? Wenn Du Memo1.Text := Memo2.Text setzt, dann werden logischerweise auch die Anzahl Strings angepasst. |
Re: Memofeld in StringList einlesen?
Ja das es mit Lines.Count nicht klappt weiß ich, hab ja die Fehlermeldung gelesen ;)
Also Memo2.Text := Memo1.Text geht ja nicht weil dann auch die Textinhalte übernommen werden. Ich erklär mal wofür ich das brauch, ist vllt einfacher zu verstehen dann. Also ein Kunde benutzt in einer Tabelle für Artikel das Langtextfeld für verschiedene Infos, hier drückt er aber nach der Eingabe oft die Eingabetaste weil er denkt er würde so in das nächste Feld Springen, also er verwechselt es mit der Tab Taste. Meine Aufgabe ist nun ein Programm zu schreiben welche die Spalte Langtext in mein erstes Memofeld einliest, dann die überflüssigen Zeilenumbrüche rauswirft und das ergebnis dann im zweiten Memofeld anzeigt. Hoffe mein Vorhaben wurde ein wenig klarer :D Meinst du mit explizit hinzufügen oder entfernen, dass ich das im Objektinspektor machen soll? mfg Alex |
Re: Memofeld in StringList einlesen?
Wieso nimmst Du nicht Assign? Beispiel siehe oben.
|
Re: Memofeld in StringList einlesen?
Hmm Assign würde doch das gleiche machen oder? Also würde doch auch den Textinhalt mit übertragen oder nicht?
|
Re: Memofeld in StringList einlesen?
Zitat:
Euer Vorgehen finde ich allerdings ein bissel von hinten durch die Brust ins Auge. Warum designed Ihr Eure Oberfläche nicht so, dass das Problem, das Ihr jetzt habt, gar nicht erst auftreten kann? Edit: Zitat:
Aber wie gesagt, ich würde in diesem Fall die Ursache beheben. |
Re: Memofeld in StringList einlesen?
Hallo Alex,
wenn keine harten Zeilenumbrüche im Memo erlaubt sind, dann kann man WantReturns abschalten. Wenn nur versehentlich am Ende angehängte Leerzeilen entfernt werden sollen, dann gibt es mehrere Möglichkeiten - hier eine:
Delphi-Quellcode:
Grüße vom marabu
with Memo do Lines.Text := Trim(Text);
|
Re: Memofeld in StringList einlesen?
Ist nicht komplett unser Programm, wir bieten unseren Kunden nur die Warenwirtschaft und einige speziell für sie entwickelte Applikationen an. Also die Warenwirtschaft selbst kommt nicht von uns.
@Marabu: Danke dir, Trim kannte ich bis jetzt auch noch nich ;) |
Re: Memofeld in StringList einlesen?
Hi,
und wenn mehrere CRLF drin sind, gehts auch so
Delphi-Quellcode:
Memo2.Text := AnsiReplaceText( AnsiReplaceText( Memo1.Text, #13, #32 ), #10, '');
|
Re: Memofeld in StringList einlesen?
Danke euch allen für eure Hilfe :-D
|
Re: Memofeld in StringList einlesen?
Eine letzte Frage habe ich allerdings noch :oops:
Kann man die von Trim() entfernten Zeilenumbrüche irgendwie zählen, oder kann man die, die am Anfang oder Ende stehn direkt im String zählen? mfg Alex |
Re: Memofeld in StringList einlesen?
[OT]
Sorry, aber wenn ich sowas lese: Du programmierst - scheinbar als extrem blutiger Anfänger - SO für Kunden? :shock: Wenn das geht, bewerbe ich mich demnächst auch als Pilot bei Germanwings, weil ich schon über 500 Flugstunden mitm A320 im MS Flusi hab. :thumb: [/OT] |
Re: Memofeld in StringList einlesen?
Schau Dir SysUtils.Trim an, und bau Dir daraus Deine eigene Trim-Funktion.
Da der Rückgabewert ja schon belegt ist übergibst Du dann neben dem zu trimmenden String einen Var-Paramter vom Typ Integer, in dem Dir die Anzahl der gelöschten Zeilenumbrüche zurückgegeben werden. Edit: @Nuclear-Ping: ich denke mal, dass darüber noch jemand sein Händchen halten wird, und das nicht ungesehen released wird ;) |
Re: Memofeld in StringList einlesen?
Die Funktion liefert die Anzahl der entfernten Leerzeilen:
Delphi-Quellcode:
function TrimLines(s: TStrings): Integer;
begin Result := s.Count; s.BeginUpdate; s.Text := Trim(s.Text); s.EndUpdate; Result := Result - s.Count; end; |
Re: Memofeld in StringList einlesen?
Bin Auszubildender im ersten Jahr ;) und das ist ja nicht direkt für den, das verwenden Wir um das Feld ein wenig sauber zu halten^^
|
Re: Memofeld in StringList einlesen?
Hallo Achim,
Zitat:
Der Umbruch wird zwar entfernt, gezählt werden aber nur tatsächlich entfernte Zeilen. |
Re: Memofeld in StringList einlesen?
Hallo Sascha,
Zitat:
Zitat:
Freundliche Grüße |
Re: Memofeld in StringList einlesen?
Zitat:
Sollte nur ein Hinweis darauf sein, dass die Funktion nicht das macht, was Borschti sich wünscht. Nichts für ungut. |
Re: Memofeld in StringList einlesen?
Also danke euch erstmal für die Hilfreichen Antworten, ich werde mich gegebenenfalls nochmal in dem Thread melden falls noch Fragen aufkommen ;)
mfg Alex |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:02 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