AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Teilstring ersetzen?

Ein Thema von AlexII · begonnen am 9. Jan 2010 · letzter Beitrag vom 9. Jan 2010
Antwort Antwort
Seite 1 von 2  1 2      
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#1

Teilstring ersetzen?

  Alt 9. Jan 2010, 15:11
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?
Bin Hobbyprogrammierer! Meine Fragen beziehen sich meistens auf Lazarus!
  Mit Zitat antworten Zitat
Benutzerbild von patti
patti

Registriert seit: 20. Okt 2004
Ort: Mittelfranken
665 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Teilstring ersetzen?

  Alt 9. Jan 2010, 15:18
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:

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.
Patrick Kreutzer
[Informatik-Student im 4. Semester]
http://www.patti-k.de/
  Mit Zitat antworten Zitat
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#3

Re: Teilstring ersetzen?

  Alt 9. Jan 2010, 15:50
Dateiname wird automatisch erstellt und kann schon eventuell Klammern enthalten, so kann ich dann falsche Klammern "packen".
Bin Hobbyprogrammierer! Meine Fragen beziehen sich meistens auf Lazarus!
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#4

Re: Teilstring ersetzen?

  Alt 9. Jan 2010, 15:55
Du könntest evtl. Reguläre Ausdrücke darauf anwenden. Aber so richtig verstanden habe ich deine Ausführung da oben nicht
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
matze99

Registriert seit: 9. Jan 2010
1 Beiträge
 
#5

Re: Teilstring ersetzen?

  Alt 9. Jan 2010, 16:28
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';
Liebe Kinder, es stimmt ... solnage auch nur der ertse und lezte Bchutsabe rihctig ist und alle andreen Bcuhsatben irgendwie vorahnden sind,
dann knan man es dennonch lesen, also macht nur weiter so, wir verstehen euch schon
  Mit Zitat antworten Zitat
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#6

Re: Teilstring ersetzen?

  Alt 9. Jan 2010, 17:17
Ok, muss mal überlegen...
Bin Hobbyprogrammierer! Meine Fragen beziehen sich meistens auf Lazarus!
  Mit Zitat antworten Zitat
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#7

Re: Teilstring ersetzen?

  Alt 9. Jan 2010, 17:33
Wow hab ich eine coole Lösung gefunden... und das SELBER!

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
Bin Hobbyprogrammierer! Meine Fragen beziehen sich meistens auf Lazarus!
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

Re: Teilstring ersetzen?

  Alt 9. Jan 2010, 17:48
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 ...
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#9

Re: Teilstring ersetzen?

  Alt 9. Jan 2010, 17:52
Wieso nicht?

Ich habe FileName neu definiert und das ohne Dateiname

Ok vllt habe ich mich falsch ausgedruckt, pardo, aber das läuft jetzt.
Bin Hobbyprogrammierer! Meine Fragen beziehen sich meistens auf Lazarus!
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#10

Re: Teilstring ersetzen?

  Alt 9. Jan 2010, 18:01
Seis drum

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
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:32 Uhr.
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