Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Teilstring ersetzen? (https://www.delphipraxis.net/145856-teilstring-ersetzen.html)

AlexII 9. Jan 2010 14:11


Teilstring ersetzen?
 
Hallo,

mein Programm erstellt Dateien in diesem Schema:
Zitat:

Eine Datei(1).txt
Eine Datei(2).txt
Und das mache ich so:
Delphi-Quellcode:
n:=n+1;
Filename:=Dateiname + '(' + n + ')' + '.txt';
Für einen Anderen Zweck habe ich danach nur die Variable "Filename" zur Verfügung und muss wieder eine Datei erstellen, habe also nur die zwei Variablen - "Filename" und "n", also "Dateiname" fällt ab aber die Datei muss wie vorher erstellt werden.

Ich dachte mit Length(Filename) die Länge des Strings zählen, Zahl 5 Subtrahieren und an dieser Stelle mit StringReplace "n" wieder einsetzen, aber was ist wenn im Filename die Zahl im Klammern 2 oder 3 stellig ist, z.B. Datei(123).txt dann wird nach meiner Logik nur die 3 ersetzt und nicht die 123. Außerdem kann man in der Funktion StringReplace keine Stelle eingeben an welcher ersetzt werden soll.

Weiß also nicht wie ich dieses Problem lösen soll. Wer kann mir bitte helfen?

patti 9. Jan 2010 14:18

Re: Teilstring ersetzen?
 
Mit Hilfe von Pos kannst du dir die Position der ersten Klammer, also "(", besorgen und in einer Variablen erstmal speichern. Das gleiche machst du noch für die geschlossene Klammer ")". Der neue Dateiname ist dann also:

Delphi-Quellcode:
FileName := Copy(FileName,1,offeneKlammer) + IntToStr(n+1) + Copy(FileName,geschlosseneKlammer,Length(FileName)-geschlosseneKlammer+1)
Hoffe, ich hab mich mit den Angaben bei Copy nicht vertan.

mfg

Edit: Der eigentliche Dateiname darf dann aber natürlich keine Klammern enthalten.
Edit 2: War doch glatt ein Fehler drin... Hoffe, dass es jetzt stimmt.

AlexII 9. Jan 2010 14:50

Re: Teilstring ersetzen?
 
Dateiname wird automatisch erstellt und kann schon eventuell Klammern enthalten, so kann ich dann falsche Klammern "packen". :roteyes:

s.h.a.r.k 9. Jan 2010 14:55

Re: Teilstring ersetzen?
 
Du könntest evtl. Reguläre Ausdrücke darauf anwenden. Aber so richtig verstanden habe ich deine Ausführung da oben nicht :gruebel:

matze99 9. Jan 2010 15:28

Re: Teilstring ersetzen?
 
Du könntest mit dieser Funktion den Dateinamen vor den Klammern auslesen.
Delphi-Quellcode:
function GetFileName(Source: String): String;
var i: integer;
begin
  for i := Length(Source) downto 1 do
  begin
    if Source[i] = '('
    then
    begin
      result := LeftStr(Source, i-1);
      break;
    end;
  end;
end;
Und dann gehst du einfach wie am Anfang vor.

Delphi-Quellcode:
Dateiname := GetFileName(FileName);
Inc(n);
Filename := Dateiname + '(' + IntToStr(n) + ')' + '.txt';

AlexII 9. Jan 2010 16:17

Re: Teilstring ersetzen?
 
Ok, muss mal überlegen... :gruebel:

AlexII 9. Jan 2010 16:33

Re: Teilstring ersetzen?
 
Wow hab ich eine coole Lösung gefunden... und das SELBER! :hello:

Also 'n' kenne ich doch. Da es schon oben in der Funktion hochgezählt wurde, zähle ich es runter und packe das Ende der erstellten Datei in 'str1' - (1).txt, dann die aktuelle Nummer der Datei in 'str2' - (2).txt

In FileName ersetze ich (1).txt durch (2).txt und fertig.

Delphi-Quellcode:
str1:='(' + IntToStr(n-1) + ')' + '.txt';
str2:='(' + IntToStr(n) + ')' + '.txt';
FileName:=StringReplace(FileName, str1, str2, [rfReplaceAll]);
Nur 3 Zeilen Arbeit :hello:

Sir Rufo 9. Jan 2010 16:48

Re: Teilstring ersetzen?
 
Ich hoffe, die fällt auch SELBER auf, dass das was du als Lösung präsentierst, nichts mit dem zu tun hat, was du im ersten Thread beschrieben hast.

Na Hauptsache du bist glücklich ... :mrgreen:

AlexII 9. Jan 2010 16:52

Re: Teilstring ersetzen?
 
Wieso nicht?

Ich habe FileName neu definiert und das ohne Dateiname :thumb:

Ok vllt habe ich mich falsch ausgedruckt, pardo, aber das läuft jetzt.

Sir Rufo 9. Jan 2010 17:01

Re: Teilstring ersetzen?
 
Seis drum :mrgreen:

Wenn du einen String zusammenbauen möchtest, so kannst du auch Delphi-Referenz durchsuchenFormat benutzen:
Delphi-Quellcode:
Filename := Format( '%s(%d).%s', [ Dateiname, n, 'txt' ] );

str1 := Format( '(%d).txt', [ n-1 ] );
str2 := Format( '(%d).txt', [ n ] );
Sieht iwi nicht so nach Kraut und Rüben aus :mrgreen:


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:42 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz