Autor Beitrag
delphistart
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 119



BeitragVerfasst: Sa 19.07.08 21:20 
Hallo,

Seit langem habe ich mal wieder Urlaub UND Zeit ein bisschen zu mit Delphi zu Programmieren.

Für folgendes Problem finde ich aber leider einfach keine Lösung:
Ich habe auf meinem Formular mehrere Labels. Diese werden mit Daten gefüllt, die ich aus einer Textdatei lade.
Nun möchte ich in der Techtdatei irgendwie Zeilenumbrüche vordefinieren. Das heist wenn dort z.B. das Zeichen '#' vorkommt soll es als Zeilenumbruch ausgegeben werden.

Dann muss ich noch irgendwie Abfragen wie viele Zeileumbrüche dieser Art vorhanden sind.

Wäre echt super, wenn jemand von euch eine Lösung hat!
Hidden
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2242
Erhaltene Danke: 55

Win10
VS Code, Delphi 2010 Prof.
BeitragVerfasst: Sa 19.07.08 21:42 
Hi,

Das verstehe ich nicht: In Delphi ist ein Zeilenumbruch ein #13#10.. In einer Textdatei kann man doch auch einfach Zeilenumbrüche einfügen(Enter!; bzw. per Delphi #13#10).

Wenn du alle '#'s durch Zeilenumbrüche ersetzen willst, müsstest du folgendes machen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
function Parse(S: String): String;
var
  i: Integer;
begin
  //entfernen der alten Zeilenumbrüche
  StringReplace(S, #13#10, '', [rfReplaceAll]);
  //einfügen der neuen Zeilenumbrüche
  StringReplace(S, '#', #13#10, [rfReplaceAll]);
  result := S;  
end;


E: Siehe auch: r2c2.weingut-rehn.de...itung_mit_Delphi.htm

mfG,

_________________
Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
delphistart Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 119



BeitragVerfasst: Sa 19.07.08 22:03 
Ja, genau so habe ich das auch zuerst probiert, aber bei dieser Variante bekomme ich #13#10 als Text ausgegeben und nicht als Zeilenumbruch, weil das dann ja quasi so da steht:
'Text#13#10Text'

die Korrekte Angabe wäre aber
'Text'#13#10'Text'

Nur wie bekomme ich die #13#10 in Label.Caption auserhalb vom String bzw. zwischen die beiten Teilstrings?
Grenzgaenger
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 19.07.08 22:13 
am besten bauen wir uns ein schleifchen ...
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
NeuStr = '';
for c in AltStr do
 if c = '#' then
  NeuStr := NeuStr + #10#13
 else
  NeuStr := NeuStr + c;
delphistart Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 119



BeitragVerfasst: Sa 19.07.08 22:41 
user profile iconGrenzgaenger hat folgendes geschrieben:
am besten bauen wir uns ein schleifchen ...
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
NeuStr = '';
for c in AltStr do
 if c = '#' then
  NeuStr := NeuStr + #10#13
 else
  NeuStr := NeuStr + c;



Vielen Herzlichen Dank!
So funktionierts!!! :dance2:
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: So 20.07.08 10:28 
user profile iconHidden hat folgendes geschrieben:
ausblenden Delphi-Quelltext
1:
  StringReplace(S, #13#10, '', [rfReplaceAll]);					

user profile icondelphistart hat folgendes geschrieben:
Ja, genau so habe ich das auch zuerst probiert, aber bei dieser Variante bekomme ich #13#10 als Text ausgegeben und nicht als Zeilenumbruch, weil das dann ja quasi so da steht:
'Text#13#10Text'

Der Code oben ist korrekt. Du hast wohl was falsch abgetippt oder falsch verstanden.

Hingegen rate ich von folgendem Code ab. Der Windows Zeilenumbruch ist #13#10, und nicht #10#13. Ausserdem sollte man Strings nicht zeichenweise zusammenbauen, da dann bei jedem Schleifendurchgang ein um 1 Byte grösserer String angelegt werden muss (d.h. ein FreeMem/GetMem pro Iteration. Dann muss auch noch jedesmal ein grösserer Speicherblock gefunden werden und die alten Daten kopiert werden). Um Strings zu ersetzen ist StringReplace da ;)
user profile iconGrenzgaenger hat folgendes geschrieben:
am besten bauen wir uns ein schleifchen ...
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
NeuStr = '';
for c in AltStr do
 if c = '#' then
  NeuStr := NeuStr + #10#13
 else
  NeuStr := NeuStr + c;
Hidden
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2242
Erhaltene Danke: 55

Win10
VS Code, Delphi 2010 Prof.
BeitragVerfasst: So 20.07.08 11:56 
Hi,

Aus deiner Beschreibung entnehme ich mal, dass du #13#10 einfach unter properties\caption eingetippt hast.

ausblenden Nochmal eine vollständige Lösung:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
function Parse(S: String): String;
var
  i: Integer;
begin
  StringReplace(S, '#13#10', #13#10, [rfReplaceAll]);
  result := S;  
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Label1.Caption := Parse(Label1.Caption);
end;


mfG,

_________________
Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)