Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - TMemo Zeilenumbruch entfernen
tolosonic - Do 23.02.06 17:51
Titel: TMemo Zeilenumbruch entfernen
Hey,
falls die frage dumm ist, sorry, bin noch anfänger :)
ich hab ein memo, dem ich mit lines.add diverse zeilen aus einer textdatei (readln) zuweise. das klappt auch alles.
nur ist am ende des memos dann immer ein zeilenumbruch. da ich später diverse memos in ein weiteres "addiere", entstehen da leerzeilen. wie kann ich den zeilenumbruch ohne viel aufwand verhinden oder löschen, so dass beim zusammenfügen keine leerzeilen entstehen?
Marco D. - Do 23.02.06 17:53
Nicht die direkte Hilfe - aber memo1.lines.loadfromfile(dateipfad) ist doch viel einfacher ;)
tolosonic - Do 23.02.06 17:54
klar, aber ich sortier da noch ein paar zeilen aus und so, weeßte? :)
Marco D. - Do 23.02.06 17:56
Dann machs mit memo1.lines.delete(index), dann werden die Zeilen gelöscht.
tolosonic - Do 23.02.06 17:58
wenn ich für index (count - 1) nehme löscht er aber nicht den zeilenumbruch, der scheint nicht als zeile zu gelten. der umbruch bleibt, die letzte zeile verschwindet. das sollte nicht so sein... :(
Marco D. - Do 23.02.06 18:00
Woran erkennst du den Zeilen, die raus sollen?
tolosonic - Do 23.02.06 18:04
achso, du meinst ich soll die leerzeilen dann im zusammengesetzten memo löschen? nö, das ist doof. geht das nicht, dass ich die zeilenumbrüche in den einzelnen memos direkt entferne?
alias5000 - Do 23.02.06 18:20
hm wie war das denn?
Ich glaub so:
Du musst in er property "TMemo.Text" nach den Zeichen #13 oder #1310 suchen (Zeichen für Zeilenumbruch) oder irgendwie sowas. Auf jedenfall ist in Text der Text mit Zeilenumbruchszeichen drinnen.
Also müsstest du diese nur noch raussuchen und entfernen.
Du könntest mal folgendes machen:
Delphi-Quelltext
1:
| Label1.Caption := memo1.Text |
um heruaszufinden, welche Zeichen es sind.
Mein Problem ist halt, dass ich grad ein Delphi in der Nähe hab...
Gruß alias5000
Ich hoffe es geht... :roll:
EDIT:
Und wenn du nicht Memo1.lines.add benutzt, sondern einfach von vorne herein an eine Zeile etwas dranhängst?
Delphi-Quelltext
1:
| Memo1.Lines.Strings[XY] := Memo1.lines.Strings[XY] + 'dein Text'; |
XY steht für die Zeile, in der das stattfindet
tolosonic - Do 23.02.06 18:26
nee, da zeigt er nur zwei striche an. aber selbst wenn ich die zeichen kenne (#13#10 glaub ich), wie entferne ich die dann ausm memo? memo1.text := memo1.text - '#13#10'; wird wohl kaum funktionieren, oder?
alias5000 - Do 23.02.06 18:29
-->
Delphi-Quelltext
1: 2: 3: 4: 5:
| var s: string; begin s := Memo1.Text; delete(s, , ); Memo1.Text := s; |
Aber les erstmal mein EDIT
Fabian W. - Do 23.02.06 18:32
such mal nach stringreplace();
tolosonic - Do 23.02.06 18:44
Delphi-Quelltext
1: 2: 3: 4:
| i:=(length(memo1.text)-1); s:=memo1.text; delete(s,i,2); memo!.text:=s; |
das ist soweit ok. nur find ich den umweg über den string noch sehr hässlich, wie kann ich vielleicht die zwei zeichen direkt löschen?
Fabian W. - Do 23.02.06 19:09
hier kann mna sich den mUnd fusselig red- naja ok -schreiben. Schau mal meinen oberen Post an.
:roll:
Freiberger - Do 23.02.06 19:47
Ich muß Fabian Recht geben...
such mal nach stringreplace();
Du ersetzt einfach alle #13 & #13+#10 gegen ''
Lannes - Do 23.02.06 20:44
Titel: Re: TMemo Zeilenumbruch entfernen
Hallo,
tolosonic hat folgendes geschrieben: |
ich hab ein memo, dem ich mit lines.add diverse zeilen aus einer textdatei (readln) zuweise. das klappt auch alles.
nur ist am ende des memos dann immer ein zeilenumbruch. da ich später diverse memos in ein weiteres "addiere", entstehen da leerzeilen. wie kann ich den zeilenumbruch ohne viel aufwand verhinden oder löschen, so dass beim zusammenfügen keine leerzeilen entstehen? |
Der Zeilenumbruch stellt beim addieren von Memo-Inhalten in ein weiteres Memo kein Problem dar, wenn man mit AddStrings arbeitet.
Angenommen Memo1 und Memo2 enthalten die bereinigten Lines.
Der letzte Zeilenumbruch kann bleiben!
Das zusammenführen geht dann so:
Delphi-Quelltext
1: 2: 3:
| Memo3.Lines.AddStrings(Memo1.Lines); Memo3.Lines.AddStrings(Memo2.Lines); |
Abgesehen davon würde ich Texte nicht über Memos zusammenführen,
da sind IMHO Stringlisten besser geeignet.
rybe - Do 23.02.06 23:49
probiere es doch mal, nach jedem memo1.lines.add(); mit:
memo1.text:=trim(memo1.text);
tolosonic - Fr 24.02.06 13:31
@lannes: danke, das hats gebracht. ja, natürlich sonst nicht mit memos, ich brauch die hier aber aus nem anderen grund. vielen dank!
... das trim() klingt laut hilfe ganz vielversprechend, bewirkt aber irgendwie überhauptnichts. seltsam.
Lannes - Fr 24.02.06 14:50
Hallo,
tolosonic hat folgendes geschrieben: |
... das trim() klingt laut hilfe ganz vielversprechend, bewirkt aber irgendwie überhauptnichts. seltsam. |
es bewirkt schon etwas.
Die Funktion Trimm entfernt alle
am Anfang und Ende eines Strings vorhandene Leer- und Steuerzeichen. Wobei in deinem Fall Memo.Test der String ist.
Angenommen folgende Zeilen sind im Memo vorhanden:
Quelltext
1: 2: 3: 4: 5: 6:
|
Zeile mit Text
Zeile mit Text |
führst Du dann den Code aus:
memo1.text:=trim(memo1.text);
sind die ersten und letzten Leerzeilen (1. 2. 3. und 7.)nicht mehr im Memo enthalten,
auch die letzte leere Zeile(nur ein Zeilenumbruch) die Dir die Probleme bereitet hat:
Quelltext
1: 2: 3:
| Zeile mit Text
Zeile mit Text |
Die leere Zeile in der Mitte kann man mit Trim nicht löschen.
davidgippner - Fr 24.02.06 15:04
Für die dazwischenliegenden Zeilen vielleicht bei der Übernahme eine if-then... einfügen:
Delphi-Quelltext
1:
| if Memo1.Lines[x]<>'' then Memo2.Lines.Add(Memo1.Lines[x]) |
oder in der Art
rybe - Sa 25.02.06 18:15
davidgippner hat folgendes geschrieben: |
Für die dazwischenliegenden Zeilen vielleicht bei der Übernahme eine if-then... einfügen:
Delphi-Quelltext 1:
| if Memo1.Lines[x]<>'' then Memo2.Lines.Add(Memo1.Lines[x]) |
oder in der Art |
oder wie folgt:
Delphi-Quelltext
1: 2: 3: 4: 5:
| var i:integer; begin for i:=memo1.lines.count-1 downto 0 do if memo1.lines[i]='' then memo1.lines.delete(i); end; |
damit sparst du dir ein zweites memo bzw eine zweites tstringlist
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!