AGB  ·  Datenschutz  ·  Impressum  







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

Punkte in Dateinamen ersetzen.

Ein Thema von Sanguis · begonnen am 23. Okt 2010 · letzter Beitrag vom 23. Okt 2010
Antwort Antwort
Seite 1 von 2  1 2      
Sanguis

Registriert seit: 20. Jul 2005
Ort: Essen
146 Beiträge
 
#1

Punkte in Dateinamen ersetzen.

  Alt 23. Okt 2010, 00:32
Delphi-Version: 2007
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
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#2

AW: Punkte in Dateinamen ersetzen.

  Alt 23. Okt 2010, 00:39
Schnell und einfach:
FileNameNew := StringReplace(ChangeFileExt(FileNameOld,''), '.', ' ', [rfReplaceAll])+ExtractFileExt(FileNameOld);
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#3

AW: Punkte in Dateinamen ersetzen.

  Alt 23. Okt 2010, 00:46
Delphi-Quellcode:
Function GetCleanFilename(const s:String):String;
begin
  Result := StringReplace(ChangeFileExt(s,''),'.',' ',[rfReplaceAll]) + ExtractFileExt(s);
end;
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

AW: Punkte in Dateinamen ersetzen.

  Alt 23. Okt 2010, 00:58
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 = ' ');
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Punkte in Dateinamen ersetzen.

  Alt 23. Okt 2010, 02:13
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;
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Sanguis

Registriert seit: 20. Jul 2005
Ort: Essen
146 Beiträge
 
#6

AW: Punkte in Dateinamen ersetzen.

  Alt 23. Okt 2010, 13:46
Ich danke Euch vielmals! Manchmal sieht man den Wald vor lauter Bäumen nicht und denkt viel zu kompliziert. Also, danke .
  Mit Zitat antworten Zitat
Sanguis

Registriert seit: 20. Jul 2005
Ort: Essen
146 Beiträge
 
#7

AW: Punkte in Dateinamen ersetzen.

  Alt 23. Okt 2010, 17:34
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
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#8

AW: Punkte in Dateinamen ersetzen.

  Alt 23. Okt 2010, 17:42
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.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#9

AW: Punkte in Dateinamen ersetzen.

  Alt 23. Okt 2010, 17:42
Man könnte das ganze Problem bestimmt auch via RegEx lösen.


Aber zu den [...]:
via Delphi-Referenz durchsuchenPos nach dem '[' suchen,
dann über Delphi-Referenz durchsuchenPos/Delphi-Referenz durchsuchenPosEx das nachfolgende ']' finden
und nun via Delphi-Referenz durchsuchenDelete diesen Bereich löschen.
$2B or not $2B
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#10

AW: Punkte in Dateinamen ersetzen.

  Alt 23. Okt 2010, 17:52
Du brauchst dazu pos und delete 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.
Gruß
Hansa
  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 08:56 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