![]() |
Delphi-Version: 2007
Punkte in Dateinamen ersetzen.
Guten Abend,
ich steh mal wieder auf dem Schlauch. Es hört sich einfach an, was ich vorhabe. Ich möchte alle Dateien in einem Ordner auslesen und nei jeder Datei im Dateinamen '.' durch ' ' ersetzen. Das Auslesen war auch kein Problem, das umbenennen auch nicht. Aber es wird auch der letzte '.' im Dateinamen ungewandelt. Das heisst, aus "Dies.ist.ein.Test.txt" wird dann "Dies ist ein Test txt".... der letzte Punkt müsste aber bleiben. Ich hab überlegt, den Punkt hinterher wieder hinzuzufügen. Aber das geht schlecht, wenn ich die Dateiendung und deren Länge nicht kenne. Weiß jemand Rat? Gruss, Andreas |
AW: Punkte in Dateinamen ersetzen.
Schnell und einfach:
Delphi-Quellcode:
FileNameNew := StringReplace(ChangeFileExt(FileNameOld,''), '.', ' ', [rfReplaceAll])+ExtractFileExt(FileNameOld);
|
AW: Punkte in Dateinamen ersetzen.
Delphi-Quellcode:
Function GetCleanFilename(const s:String):String;
begin Result := StringReplace(ChangeFileExt(s,''),'.',' ',[rfReplaceAll]) + ExtractFileExt(s); end; |
AW: Punkte in Dateinamen ersetzen.
Get ist ein schlechtes Verb für die Funktion. Mit Get verbindet man in der Regel einer Getter-Methode einer Klasse, die den Wert eines Attributs zurückliefert. Make, Do oder gar nichts wäre besser. Oder noch besser ReplaceDotsWithSpaceInFilename(Filename: string): string; Man könnte es noch verallgemeinern: ReplaceDotsInFilename(Filename: string, ReplaceWith: string = ' ');
|
AW: Punkte in Dateinamen ersetzen.
Moin Zusammen,
statt sich mit solchen Funktionen wie StringReplace zu belasten (bezüglich der Performance) schlage ich folgenden Weg vor:
Delphi-Quellcode:
function ReplaceDotsInFilename(const AsFilename : string;const AReplaceChar : Char = ' ') : string;
var i : Integer; begin SetLength(Result,Length(AsFilename)); for i := 1 to LastDelimiter('.',AsFilename)-1 do begin if AsFilename[i] <> '.' then begin Result[i] := AsFilename[i]; end else begin Result[i] := AReplaceChar; end; end; for i := LastDelimiter('.',AsFilename) to Length(AsFilename) do begin Result[i] := AsFilename[i]; end; end; |
AW: Punkte in Dateinamen ersetzen.
Ich danke Euch vielmals! Manchmal sieht man den Wald vor lauter Bäumen nicht und denkt viel zu kompliziert. Also, danke :).
|
AW: Punkte in Dateinamen ersetzen.
Au man, meine Zerstreutheit nimmt kein Ende.
Ich möchte noch alles was in Klammern steht, inkl. der Klammern, aus dem String entfernen. Ich denke dazu muss ich mit pos() die Klammern finden und dann einen Substring erstellen. Mein Problem ist, das die Klammern mehrfach vorkommen können und nicht immer an der selben Stelle. Also mal am Anfang, mal in der Mitte, mal am Ende. Mit immer unterschiedlichem Inhalt. Wonach soll ich also suchen und wie entferne ich nur den Teil? Au mann... ich bekomm Kopfschmerzen... Gruss, Andreas |
AW: Punkte in Dateinamen ersetzen.
Wenn Du den Code von Christian Seehase dahingehend modifizierst daß Du nur gültige oder ersetzte Zeichen an ein inital leeres Result anhängst kannst Du sobald Du ( findest z.B. eine Flag IsInBreak setzen welches beim Erreichen von ) zurückgesetzt wird. Solange IsInBreak gesetzt ist wird nichts an Result angehängt.
|
AW: Punkte in Dateinamen ersetzen.
|
AW: Punkte in Dateinamen ersetzen.
Du brauchst dazu
Delphi-Quellcode:
und
pos
Delphi-Quellcode:
Pos wird dabei zweimal gebraucht. Zuerst mal die Position der öffenden Klammer festhalten und dann die Position der schliessenden. Alles dazwischen wird mit delete gelöscht. Notfalls wird das eben mehrfach gemacht, zumindest bis dann endlich pos ('(',st) = 0 ist. Das sind aber alles elementare Grundlagen. Deshalb der obligatorische Hinweis : Handbuch lesen. Diese Aufforderung käme mit 100% Sicherheit sowieso in nächster Zeit. :mrgreen:
delete
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:47 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