Autor Beitrag
tolosonic
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 36



BeitragVerfasst: Do 23.02.06 17:51 
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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2750

Windows Vista
Delphi 7, Delphi 2005 PE, PHP 4 + 5 (Notepad++), Java (Eclipse), XML, XML Schema, ABAP, ABAP OO
BeitragVerfasst: Do 23.02.06 17:53 
Nicht die direkte Hilfe - aber memo1.lines.loadfromfile(dateipfad) ist doch viel einfacher ;)

_________________
Pascal keeps your hand tied. C gives you enough rope to hang yourself. C++ gives you enough rope to shoot yourself in the foot
tolosonic Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 36



BeitragVerfasst: Do 23.02.06 17:54 
klar, aber ich sortier da noch ein paar zeilen aus und so, weeßte? :)
Marco D.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2750

Windows Vista
Delphi 7, Delphi 2005 PE, PHP 4 + 5 (Notepad++), Java (Eclipse), XML, XML Schema, ABAP, ABAP OO
BeitragVerfasst: Do 23.02.06 17:56 
Dann machs mit memo1.lines.delete(index), dann werden die Zeilen gelöscht.

_________________
Pascal keeps your hand tied. C gives you enough rope to hang yourself. C++ gives you enough rope to shoot yourself in the foot
tolosonic Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 36



BeitragVerfasst: 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2750

Windows Vista
Delphi 7, Delphi 2005 PE, PHP 4 + 5 (Notepad++), Java (Eclipse), XML, XML Schema, ABAP, ABAP OO
BeitragVerfasst: Do 23.02.06 18:00 
Woran erkennst du den Zeilen, die raus sollen?

_________________
Pascal keeps your hand tied. C gives you enough rope to hang yourself. C++ gives you enough rope to shoot yourself in the foot
tolosonic Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 36



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2145

WinXP Prof SP2, Ubuntu 9.04
C/C++(Code::Blocks, VS.NET),A51(Keil),Object Pascal(D2005PE, Turbo Delphi Explorer) C# (VS 2008 Express)
BeitragVerfasst: 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:
ausblenden 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?
ausblenden Delphi-Quelltext
1:
Memo1.Lines.Strings[XY] := Memo1.lines.Strings[XY] + 'dein Text';					

XY steht für die Zeile, in der das stattfindet

_________________
Programmers never die, they just GOSUB without RETURN
tolosonic Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 36



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2145

WinXP Prof SP2, Ubuntu 9.04
C/C++(Code::Blocks, VS.NET),A51(Keil),Object Pascal(D2005PE, Turbo Delphi Explorer) C# (VS 2008 Express)
BeitragVerfasst: Do 23.02.06 18:29 
-->
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
var s: string;
begin
s := Memo1.Text;
delete(s, {der Index des Zeichens}{Länge des Zeichens});
Memo1.Text := s;


Aber les erstmal mein EDIT

_________________
Programmers never die, they just GOSUB without RETURN
Fabian W.
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1766

Win 7
D7 PE
BeitragVerfasst: Do 23.02.06 18:32 
such mal nach stringreplace();
tolosonic Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 36



BeitragVerfasst: Do 23.02.06 18:44 
ausblenden 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.
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1766

Win 7
D7 PE
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 130

WIN XP
Delphi 7
BeitragVerfasst: Do 23.02.06 19:47 
Ich muß Fabian Recht geben...
such mal nach stringreplace();

Du ersetzt einfach alle #13 & #13+#10 gegen ''
Lannes
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: Do 23.02.06 20:44 
Hallo,
user profile icontolosonic 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:
ausblenden 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.

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
rybe
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Do 23.02.06 23:49 
probiere es doch mal, nach jedem memo1.lines.add(); mit:

memo1.text:=trim(memo1.text);
tolosonic Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 36



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: Fr 24.02.06 14:50 
Hallo,
user profile icontolosonic 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:
ausblenden 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:
ausblenden Quelltext
1:
2:
3:
Zeile mit Text

Zeile mit Text

Die leere Zeile in der Mitte kann man mit Trim nicht löschen.

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
davidgippner
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 23



BeitragVerfasst: Fr 24.02.06 15:04 
Für die dazwischenliegenden Zeilen vielleicht bei der Übernahme eine if-then... einfügen:

ausblenden Delphi-Quelltext
1:
if Memo1.Lines[x]<>'' then Memo2.Lines.Add(Memo1.Lines[x])					


oder in der Art
rybe
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Sa 25.02.06 18:15 
user profile icondavidgippner hat folgendes geschrieben:
Für die dazwischenliegenden Zeilen vielleicht bei der Übernahme eine if-then... einfügen:

ausblenden Delphi-Quelltext
1:
if Memo1.Lines[x]<>'' then Memo2.Lines.Add(Memo1.Lines[x])					


oder in der Art


oder wie folgt:

ausblenden 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