![]() |
Teilstring ersetzen?
Hallo,
mein Programm erstellt Dateien in diesem Schema: Zitat:
Delphi-Quellcode:
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.
n:=n+1;
Filename:=Dateiname + '(' + n + ')' + '.txt'; 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? |
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:
Hoffe, ich hab mich mit den Angaben bei Copy nicht vertan.
FileName := Copy(FileName,1,offeneKlammer) + IntToStr(n+1) + Copy(FileName,geschlosseneKlammer,Length(FileName)-geschlosseneKlammer+1)
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. |
Re: Teilstring ersetzen?
Dateiname wird automatisch erstellt und kann schon eventuell Klammern enthalten, so kann ich dann falsche Klammern "packen". :roteyes:
|
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:
|
Re: Teilstring ersetzen?
Du könntest mit dieser Funktion den Dateinamen vor den Klammern auslesen.
Delphi-Quellcode:
Und dann gehst du einfach wie am Anfang vor.
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;
Delphi-Quellcode:
Dateiname := GetFileName(FileName);
Inc(n); Filename := Dateiname + '(' + IntToStr(n) + ')' + '.txt'; |
Re: Teilstring ersetzen?
Ok, muss mal überlegen... :gruebel:
|
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:
Nur 3 Zeilen Arbeit :hello:
str1:='(' + IntToStr(n-1) + ')' + '.txt';
str2:='(' + IntToStr(n) + ')' + '.txt'; FileName:=StringReplace(FileName, str1, str2, [rfReplaceAll]); |
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: |
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. |
Re: Teilstring ersetzen?
Seis drum :mrgreen:
Wenn du einen String zusammenbauen möchtest, so kannst du auch ![]()
Delphi-Quellcode:
Sieht iwi nicht so nach Kraut und Rüben aus :mrgreen:
Filename := Format( '%s(%d).%s', [ Dateiname, n, 'txt' ] );
str1 := Format( '(%d).txt', [ n-1 ] ); str2 := Format( '(%d).txt', [ n ] ); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:11 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 by Thomas Breitkreuz