Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Es wird nur in eine datei geschrieben (https://www.delphipraxis.net/53445-es-wird-nur-eine-datei-geschrieben.html)

Lindworm 16. Sep 2005 18:49


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:
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.
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 :)
Grüße, Bene

faux 16. Sep 2005 18:52

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))

Lindworm 16. Sep 2005 18:56

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 :)

Sharky 16. Sep 2005 19:02

Re: Es wird nur in eine datei geschrieben
 
Hai Lindworm,

was faux sagen wollte ist folgendes:
Wenn Du mit
Delphi-Quellcode:
begin
.
  stringlist.SaveToFile ('blubb.txt');
.
end;
die Datei speicherst wird diese in das aktuelle Verzeichniss von Windows geschrieben. Dies ist nicht zwingend das Verzeichniss in dem dein Programm liegt.

Mit der Konstruktion
Delphi-Quellcode:
begin
.
  stringlist.SaveToFile(ExtractFilePath(ParamStr(0)) + 'blubb.txt');
.
end;
Wird die Datei in dem Verzeichniss gespeichert in dem dein Programm liegt.

Lindworm 16. Sep 2005 19:03

Re: Es wird nur in eine datei geschrieben
 
achso, sorry wegen dem Missverständnis, werde das gleich mal testen :D

marabu 16. Sep 2005 19:04

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:
var
  dir: string;
...
GetDir(0, dir);
ShowMessage(dir); // wohin schreiben wir denn?
ShowMessage(srconneu.Text); // was wollen wir denn schreiben?
srconneu.SaveToFile('rcon.cfg');
...
Grüße vom marabu

Lindworm 16. Sep 2005 19:14

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 :)

faux 16. Sep 2005 19:16

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:
r1:=edrcon1.Text;
r2:=edrcon2.Text;
r3:=edrcon3.Text;
das machen:

Delphi-Quellcode:
for i := 1 to 3
r[i]:=edrcan[i].Text;
Oder so ähnlich.

marabu 16. Sep 2005 19:43

Re: Es wird nur in eine datei geschrieben
 
Hi Bene,

nur als Denkanstoß:

Delphi-Quellcode:
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.
Freundliche Grüße vom marabu

Lindworm 16. Sep 2005 19:52

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.
Seite 1 von 2  1 2      

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