![]() |
Es wird nur in eine datei geschrieben
Hi, ich habe noch nicht all zuviel Ahnung von Delphi, deshalb habe ich hier ein kleines Problemchen und hoffe, dass mir
jemand dabei helfen kann es zu lösen. Wenn ich nen Logikfehler drinnehab, dann bitte nicht nur ne fertige Lösung sagen oder so, sondern nach Mglk. auch erläutern, damitich den Fehler ned nochmal mache ;-) Das ist mein Quelltext:
Delphi-Quellcode:
Im Prinzip funktioniert das ganze ja halbwegs, bis auf den Punkt, dass nur die Commandmenu.txt erstellt wird, die rcon.cfg aber ned. Anfangs war der gesamte Teil, der für die commandmenu.txt zuständig ist nicht drin und das Script hat auhc klasse geklappt, hoffe Ihr könnt mir helfen :)
var
Form1: TForm1; nb1, nb2, nb3, r1, r2, r3, ip1, ip2, ip3 :string; snb, snbneu, srconneu, srcon :TStringlist; implementation {$R *.dfm} procedure TForm1.btsavedataClick(Sender: TObject); begin srcon := TStringlist.Create; srconneu := TStringlist.Create; snb := TStringlist.Create; snbneu := TStringlist.Create; srcon.LoadFromFile('varrcon.cfg'); snb.LoadFromFile('varcommandmenu.txt'); r1:=edrcon1.Text; r2:=edrcon2.Text; r3:=edrcon3.Text; ip1:=edip1.Text; ip2:=edip2.Text; ip3:=edip3.Text; nb1:=ednb1.Text; nb2:=ednb2.Text; nb3:=ednb3.Text; srconneu.Text := StringReplace(srcon.Text, 'xrcon_pw1', r1, [rfIgnoreCase]); srconneu.Text := StringReplace(srconneu.Text, 'xrcon_pw2', r2, [rfIgnoreCase]); srconneu.Text := StringReplace(srconneu.Text, 'xrcon_pw3', r3, [rfIgnoreCase]); srconneu.Text := StringReplace(srconneu.Text, 'xip1', ip1, [rfIgnoreCase]); srconneu.Text := StringReplace(srconneu.Text, 'xip2', ip2, [rfIgnoreCase]); srconneu.Text := StringReplace(srconneu.Text, 'xip3', ip3, [rfIgnoreCase]); snbneu.Text := StringReplace(snb.Text, 'xservname1', nb1, [rfReplaceAll, rfIgnoreCase]); snbneu.Text := StringReplace(snbneu.Text, 'xservname2', nb2, [rfReplaceAll, rfIgnoreCase]); snbneu.Text := StringReplace(snbneu.Text, 'xservname3', nb3, [rfReplaceAll, rfIgnoreCase]); srconneu.SaveToFile('rcon.cfg'); snbneu.SaveToFile('commandmenu.txt'); srcon.Free; srconneu.Free; snb.Free; snbneu.Free; end; end. Grüße, Bene |
Re: Es wird nur in eine datei geschrieben
Es liegt warscheinlich nicht daran, aber ich würde immer einen Pfad angeben. (ev. mit ExtractPath(ParamStr(0)) (glaub so heißt das))
|
Re: Es wird nur in eine datei geschrieben
hmm, das Script soll aber eigentlcih beliebig verschiebbar sein, da es ein Teil einer CS-Scriptsammlung ist :-/
deshalb wäre es eigentlich unpraktisch, wenn man immer das Verzeichnis abfragen müsste, aber schonmal danke für deine Antwort :) |
Re: Es wird nur in eine datei geschrieben
Hai Lindworm,
was faux sagen wollte ist folgendes: Wenn Du mit
Delphi-Quellcode:
die Datei speicherst wird diese in das aktuelle Verzeichniss von Windows geschrieben. Dies ist nicht zwingend das Verzeichniss in dem dein Programm liegt.
begin
. stringlist.SaveToFile ('blubb.txt'); . end; Mit der Konstruktion
Delphi-Quellcode:
Wird die Datei in dem Verzeichniss gespeichert in dem dein Programm liegt.
begin
. stringlist.SaveToFile(ExtractFilePath(ParamStr(0)) + 'blubb.txt'); . end; |
Re: Es wird nur in eine datei geschrieben
achso, sorry wegen dem Missverständnis, werde das gleich mal testen :D
|
Re: Es wird nur in eine datei geschrieben
Hi Bene,
herzlich willkommen in der Delphi-PRAXiS. Mir tun zwar die Augen weh, wenn ich deinen Code anseh, aber nach zweimal Lesen kann ich keinen offensichtlichen Fehler entdecken. Muss ja nichts heißen. Baue doch einfach mal eine Kontrolle ein:
Delphi-Quellcode:
Grüße vom marabu
var
dir: string; ... GetDir(0, dir); ShowMessage(dir); // wohin schreiben wir denn? ShowMessage(srconneu.Text); // was wollen wir denn schreiben? srconneu.SaveToFile('rcon.cfg'); ... |
Re: Es wird nur in eine datei geschrieben
Hi, also nachdem ich des mit extractfilepath gemacht habe, geht alles :D
Danke euch dreien und @marabu: wie soll ichs denn anders/besser aufbauen, ich finde das sieht schon recht übersichtlcih aus :angel2: danke@faux, werde mich bemühen sowas in nächster Zeit mehr zu automatisieren :) |
Re: Es wird nur in eine datei geschrieben
Du könntest zB die StringReplace's mit Arrays aufbauen...
Und wenn du die edrcon1, edrcon2 und edrcon3 - Objekte (sind glaubich TextFelder) nicht mit dem Objektinspektor machst, sondern wärend der Laufzeit in ein Array schreibst, kannst du zB aus
Delphi-Quellcode:
das machen:
r1:=edrcon1.Text;
r2:=edrcon2.Text; r3:=edrcon3.Text;
Delphi-Quellcode:
Oder so ähnlich.
for i := 1 to 3
r[i]:=edrcan[i].Text; |
Re: Es wird nur in eine datei geschrieben
Hi Bene,
nur als Denkanstoß:
Delphi-Quellcode:
Freundliche Grüße vom marabu
interface
type TForm1 = class(TForm) // solltest du vielleicht auch mal umbenennen ... private dataDir: string; procedure ApplyChanges(fileName: string; changes: TStringList); procedure FormCreate(); ... end; var Form1: TForm1; // hier keine eigenen Variablen deklarieren // die werden besser lokal deklariert // oder als Objekt-Variablen von TForm1 implementation {$R *.dfm} procedure TForm1.ApplyChanges(fileName: string; changes: TStringList); var i: integer; sl: TStringList; key, value, s: string; begin sl := TStringList.Create; sl.LoadFromFile(dataDir + 'var' + fileName); s := sl.Text; for i := 0 to Pred(changes.Count) do begin key := changes.Names[i]; value := changes.Values[key]; s := StringReplace(s, key, value, [rfIgnoreCase]); end; sl.Text := s; sl.SaveToFile(dataDir + fileName); sl.Free; end; procedure TForm1.FormCreate(...); begin dataDir := ExtractFilePath(ParamStr(0)); end; procedure TForm1.btsavedataClick(Sender: TObject); var changes: TStringList; begin changes := TStringlist.Create; changes.Values['xrcon_pw1'] := edrcon1.Text; changes.Values['xrcon_pw2'] := edrcon2.Text; changes.Values['xrcon_pw3'] := edrcon3.Text; changes.Values['xip1'] := edip1.Text; changes.Values['xip2'] := edip2.Text; changes.Values['xip3'] := edip3.Text; ApplyChanges('rcon.cfg', changes); changes.Clear; changes.Values['xservname1'] := ednb1.Text; changes.Values['xservname2'] := ednb2.Text; changes.Values['xservname3'] := ednb3.Text; ApplyChanges('commandmenu.txt', changes); changes.Free; end; end. |
Re: Es wird nur in eine datei geschrieben
Hi marabu,
du hast dir ja richtig Arbeit gemcht, danke :D gucke mir gerade deine Umsetzungen an, damit ichs in nächtser zeit auch so aufbauen kann :) Grüsse, Bene |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:40 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