Autor Beitrag
somme_ma
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 32



BeitragVerfasst: Mi 28.12.05 22:34 
Hallo, mein Problem ist folgendes:
ich habe eine Datei in der text steht, aber auch Platzhalter für Variablen.

ausblenden Quelltext
1:
\setkomavar{title}{' + Betreff + '}					


Wobei Betreff die Variable wäre.

Mittels
ausblenden Delphi-Quelltext
1:
2:
3:
4:
f := TStringList.Create;
f.Loadfromfile('E:/scrlttr2.tex');
for k:=0 to f.Count - 1  do
f.Add(f[k]);


lese ich diese Datei ein, jedoch werden bei der ausgabe die Variablen nicht eingesetzt, die von einem Stringgrid übergeben werden!! die Datei werden als reiner text interpretiert und ausgegeben.

Bisher hatte ich diese Datei direkt im Programm implementiert, wo ich es mit

f.Add('\setkomavar{title}{' + Betreff + '}');

hinzugefügt hab und hier klappt das auch prima - er setzt für Betreff die entsprechende Variableninformation ein.

Was muss ich jetzt machen, dass es auch per Datei klappt? Muss ich da die Zeilen in der Datei irgendwie anders schreiben doer so? Vorallem was muss ich machen, dass er es nicht als reinen text interpretiert?

Vielen Dank schonmal für Hilfe,

somme_ma
JayK
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1013



BeitragVerfasst: Mi 28.12.05 22:53 
ich hab dein Prob zwar nicht ganz verstanden, aber ich versuch dir mal zu helfen ;)
Wenn in der Datei blabla 'foo' blöblö steht, dann werden die ' nicht den String unterbrechen. Ein ' aus der Datei wird dann für Delphi als '' bzw. #191 genommen (Delphi nimmt es als ASCII/ANSI Zeichen und nicht als Teil des Codes auf).
somme_ma Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 32



BeitragVerfasst: Mi 28.12.05 23:05 
Hm, ok. Schonmal ein guter Hinweis.


Zuletzt bearbeitet von somme_ma am Mo 02.01.06 10:51, insgesamt 2-mal bearbeitet
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: Mi 28.12.05 23:05 
Da musst du einen einfachen Parser bauen.
Benenn deine Variablen z.B. so: %Betreff%:
\setkomavar{title}{ %Betreff% }

In deinem Programm benützst du dann die Funktion StringReplace um %Betreff% durch den Inhalt einer Variablen zu ersetzen. Delphi ist nicht PHP und neuer Code kann nicht ohne weiteres zur Laufzeit interpretiert werden.

Dein Programm wird nämlich beim Compilieren zu Maschinensprache übersetzt; deine Variablen werden dort nicht per Namen angesprochen sondern direkt durch eine Adresse im Speicher. Wie die Variable in deinem Quelltext hiess, ist völlig belanglos. Deswegen geht's nicht ohne den Umweg wie oben beschrieben (das ist natürlich aber nicht die einzige Möglichkeit).
somme_ma Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 32



BeitragVerfasst: Mi 28.12.05 23:08 
Ah, schon verstanden.


Zuletzt bearbeitet von somme_ma am Mo 02.01.06 10:51, insgesamt 1-mal bearbeitet
JayK
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1013



BeitragVerfasst: Mi 28.12.05 23:28 
du musst aus f noch einen einfachen String machen, weiß jetzt dummerweise grad net wie :autsch: hat TStringList die Eigenschaft Text? Wenn ja, dann nimm die ;) ansonsten guck mal in der Hilfe.
somme_ma Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 32



BeitragVerfasst: Mi 28.12.05 23:33 
Sehr gut sehr gut!

hab jetzt
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
     f := TStringList.Create;
     f.Loadfromfile('E:/scrlttr2.tex');
     for k:=0 to f.Count-1 do begin
     f.Add(f[k]);
     brief := f.Text;
     StringReplace(brief, '%Betreff%', 'Betreff',[rfReplaceAll]);
     end;


Aber ich frag mich, wieso er für count immer die doppelte zahl nimmt!

Zudem bin ich mir noch nicht sicher, ob er jetzt echt die sachen ersetzt. mal schauen...
JayK
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1013



BeitragVerfasst: Mi 28.12.05 23:40 
user profile iconsomme_ma hat folgendes geschrieben:
Aber ich frag mich, wieso er für count immer die doppelte zahl nimmt!

Diese Aussage verstehe ich jetzt nicht :? das doppelte von was? Und was meinst du überhaupt mit "für Count"? :lol:

allgemeiner Tipp: Rücke alles in der for Schleife ein, dann lässt es sich besser lesen ;)
somme_ma Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 32



BeitragVerfasst: Mi 28.12.05 23:47 
mit f.count liest er die zeilenanzahl meiner datei, die bei 22 liegen sollte, er nimmt aber immer 44 und schreibt dann den inhalt der datei auch zweimal beim speichern hintereinander rein.


Zuletzt bearbeitet von somme_ma am Mo 02.01.06 10:52, insgesamt 1-mal bearbeitet
JayK
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1013



BeitragVerfasst: Do 29.12.05 00:00 
Klar, dass es mehr als 22 Zeilen sind. Zumidnest im Verlauf der Schleife werden es mehr:
mit f.Add(f[k]); fügst du diener StringList einen Eintrag hinzu, um genau zu sein einen, der weiter oben schonmal steht. Ich frage mich, was diese Anweisung überhaupt soll :P
somme_ma Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 32



BeitragVerfasst: Do 29.12.05 00:03 
ok überredet ;-)

Aber ersetzen tut er es trotzdem nicht! :-(
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: Do 29.12.05 00:05 
Die Schleife ist unnötig und du musst '%Betreff%' nicht durch 'Betreff' ersetzen sondern Betreff (die Variable).
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
     f := TStringList.Create;  
     f.LoadFromFile('E:\scrlttr2.tex');  
     brief := f.Text;  
     brief := StringReplace(brief, '%Betreff%', Betreff,[rfReplaceAll]);  
     brief := StringReplace(brief, '%Nachname2%', Nachname2,[rfReplaceAll]);  
     brief := StringReplace(brief, '%Vorname2%', Vorname2,[rfReplaceAll]);  
     brief := StringReplace(brief, '%Strasse%', Strasse,[rfReplaceAll]);  
     brief := StringReplace(brief, '%Postleitzahl%', Postleitzahl,[rfReplaceAll]);  
     brief := StringReplace(brief, '%Ort%', Ort,[rfReplaceAll]);  
     brief := StringReplace(brief, '%Anrede%', Anrede,[rfReplaceAll]);  
     brief := StringReplace(brief, '%inhalt%', inhalt,[rfReplaceAll]);  
     f.Text := brief;
somme_ma Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 32



BeitragVerfasst: Do 29.12.05 00:07 
Ja du bist großartig, perfekt, alles klappt. Grandios!

Vielen Dank an euch beide!!

Mit freundlichen Grüßen
somme_ma