AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Dateiname: Ersetzen/Löschen von Teilstrings
Thema durchsuchen
Ansicht
Themen-Optionen

Dateiname: Ersetzen/Löschen von Teilstrings

Ein Thema von Delphi_gn7 · begonnen am 31. Mai 2009 · letzter Beitrag vom 9. Jun 2009
Antwort Antwort
Seite 1 von 2  1 2      
Delphi_gn7

Registriert seit: 21. Mai 2009
59 Beiträge
 
Delphi 7 Personal
 
#1

Dateiname: Ersetzen/Löschen von Teilstrings

  Alt 31. Mai 2009, 15:56
Hi,

Ich suche ein Programm, mit dem man die Dateinamen von (in meinem Fall) Musikdateien massenhaft bearbeiten kann, sodass unnötige Zeichen wie Unterstriche antfernt/durch anderes ersetzt werden.
z.B.

aus "101_michael_mind_-_ride_like_the_wind.mp3" wird "michael mind - ride like the wind.mp3"

Ich habe etwa 10 Monate Delphi Erfahrung und habe mir mithilfe einer Prozedur, die ich unter http://www.delphi-library.de/topic_n...chen_1107.html gefunden habe, ein Programm dafür zusammengebastelt. Da ich also nicht alles selber geschrieben habe kam es natürlich zu Komplikationen.

Frage: Kann man kleine Verbesserungen an dem Programm vornehmen, sodass es funktioniert, oder sollte ich lieber vorerst die Finger davon lassen, bis ich es selbst verstehe?
In dem Fall würde ich trotzdem gerne wissen ob es bereits ein Programm gibt, das mein Problem löst.

Delphi-Quellcode:
program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;

function lastSlash(path: string):string;
var
hilfStr: string;
slashPos: integer;
begin
hilfStr:=path;
while (pos('\',hilfStr) > 0) do
hilfStr:=copy(hilfStr,slashPos+1,length(hilfStr)-slashPos);
result:=hilfStr;
end;

procedure RenameFiles (var datei: string; Ren, RenIn: string);
Var
  FindRec: tSearchRec;
  DateiName: string;
Begin
 If (datei = '') Then Exit;

  If FindFirst (datei, faAnyFile, FindRec) <> 0
  Then Repeat
       If (FindRec.Name <> '.') and (FindRec.Name <> '..')
       Then begin
            DateiName:=datei+FindRec.Name;
            if (pos(Ren,DateiName) > 0)
            then begin
                 insert(RenIn,DateiName,(pos(Ren,DateiName)));
                 delete(DateiName,pos(Ren,DateiName),length(Ren));
                 RenameFile(datei,lastSlash(datei)+DateiName);
                 end

            else writeln('Teilstring nicht gefunden');
            end;
       Until FindNext (FindRec) <> 0;

  FindClose (FindRec);



end;




var
  dir, Ren, RenIn, datei,namestring: string;

begin
write('Ordner (mit Backslash): ');
readln(dir);
namestring:=lastSlash(dir);
write('Umzubenennender Teilstring: ');
readln(Ren);
write('Zu ersetzen durch: ');
readln(RenIn);
RenameFiles (dir,Ren,RenIn);
readln;
end.
Andreas
  Mit Zitat antworten Zitat
Anonymos
(Gast)

n/a Beiträge
 
#2

Re: Dateiname: Ersetzen/Löschen von Teilstrings

  Alt 31. Mai 2009, 16:10
Moin,

Also erstmal wäre es nett, wenn du mal beschreibe würdest wo dein Fehler überhaupt liegt.
Soweit ich des grad übersehen hab wird "lastslash" schonmal überhauptnicht verwendet

Weiter rate ich jetz einfach mal, das das problem beim Umbenennen liegt:
soll heißen, die Dateien werden umbenannt, aber falsch

In diesem Fall schau dir nochmal die Funktionsweise von Insert und Delete an
(Du Deletest an der gleichen Stelle, an der du vorher eingefügt hast)

Um dir die Funktionsweise ein bisschen darzustellen:
Die Funktion FindFirst sucht solange nach Dateinamen in dem angegebenen Verzeichnis, bis FindNext nichts mehr findet.
Man kann sich das ganze wie beim lesen einer Datei vorstellen, die man liest, bis EOF das Dateiende angibt.

mfg
  Mit Zitat antworten Zitat
Delphi_gn7

Registriert seit: 21. Mai 2009
59 Beiträge
 
Delphi 7 Personal
 
#3

Re: Dateiname: Ersetzen/Löschen von Teilstrings

  Alt 31. Mai 2009, 16:46
lastSlash wird bei RenameFile verwendet

vorher wird erst der neue, ersetzende Teilstring "renIn" eingesetzt, womit ja der Rest des Strings verschoben wird (oder habe ich die insert Prozedur falsch interpretiert und sie erhöht die Länge des Strings gar nicht...??), somit ändert sich auch die Position von "Ren", das dann gelöscht wird.

Wenn ich zuerst "Ren" löschen würde, wüsste ich ja nicht mehr an welcher Stelle "RenIn" eingefügt werden soll, ohne das ich eine Hilfsvariable benutze, die die Position speichert.

Zum Programmfehler: Das Programm lief, veränderte aber rein gar nichts an meinen Dateinamen.
Andreas
  Mit Zitat antworten Zitat
Namenloser

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

Re: Dateiname: Ersetzen/Löschen von Teilstrings

  Alt 31. Mai 2009, 16:48
Total Commander (übrigens auch sonst zu empfehlen)
  Mit Zitat antworten Zitat
Delphi_gn7

Registriert seit: 21. Mai 2009
59 Beiträge
 
Delphi 7 Personal
 
#5

Re: Dateiname: Ersetzen/Löschen von Teilstrings

  Alt 31. Mai 2009, 16:51
Habe nochmal die Prozedur insert nachgeschlagen... sie macht das, was ich auch erwartet habe... eine Prozedur, die beim Einfügen des Teilstrings die schon an dieser Stelle vorhandenen zeichen dabei löscht (wobei also die Länge des String gleich bleibt), gibt es auch, sei heißt "StringReplace"
(http://www.delphi-treff.de/no_cache/...f8f&sword_list[0]=stringverarbeitung)
Andreas
  Mit Zitat antworten Zitat
Anonymos
(Gast)

n/a Beiträge
 
#6

Re: Dateiname: Ersetzen/Löschen von Teilstrings

  Alt 31. Mai 2009, 16:55
ok, sorry
da hast du recht
Du bestimmst die Position von Ren ja nochmals neu

Die Variable "datei" in RenameFiles enthält nur den OrdnerPfad (?)
Und so eine Datei kannst du nicht umbenennen
geb bei RenameFile mal den ganzen Dateinamen an
Delphi-Quellcode:
RenameFile(datei+FindRec.Name,datei+DateiName);
// alter Dateiname | neuer Dateiname
  Mit Zitat antworten Zitat
Delphi_gn7

Registriert seit: 21. Mai 2009
59 Beiträge
 
Delphi 7 Personal
 
#7

Re: Dateiname: Ersetzen/Löschen von Teilstrings

  Alt 31. Mai 2009, 17:41
Oh stimmt

dann wird die Funktion LastSlash (die von einem Pfad + Dateinamen den Pfad wegschneidet, sodass der Dateiname übrigbleibt) ja sogar überflüssig.
habe auch durch einen Hinweis von Delphi festgestellt, das die Variable Slashpos in dieser Funktion gar nicht initialisiert wurde... hab sie mal gestrichen und sie durch das längere "pos('\',hilfStr)" ersetzt.

trotzdem funktioniert es so nicht, ich blocke auch gar nicht mehr so gut durch wegen den vielen Variablen....
Andreas
  Mit Zitat antworten Zitat
Delphi_gn7

Registriert seit: 21. Mai 2009
59 Beiträge
 
Delphi 7 Personal
 
#8

Re: Dateiname: Ersetzen/Löschen von Teilstrings

  Alt 31. Mai 2009, 18:09
Zitat von NamenLozer:
Total Commander (übrigens auch sonst zu empfehlen)
Danke für den Tipp!
Kannst du mir sagen, ob/wie man Leerzeichen ENTFERNEN kann?
Andreas
  Mit Zitat antworten Zitat
der_hugo

Registriert seit: 1. Sep 2008
12 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: Dateiname: Ersetzen/Löschen von Teilstrings

  Alt 31. Mai 2009, 18:14
Hallo,

evtl. hilft dir hier mein Programm RenamePack

Viele Grüße

der_hugo
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Dateiname: Ersetzen/Löschen von Teilstrings

  Alt 31. Mai 2009, 18:23
Dein insert und rename ersetzt immer nur das erste Vorkommen des gesuchen Strings/Zeichens.

Für alle Vorkommen müßtest du es in einer Schleife solange wiederholen, bis der String/das Zeichen nicht mehr vorkommt.

Aber zum Ersetzen würde ich dir Delphi-Referenz durchsuchenStringReplace empfehlen.


Dann macht es sich besser erstmal alle (nötigen) Dateien in eine Liste aufzunehmen und anzuzeigen, so daß man da nochmal schnell drüberschauen und eventuell noch was ändern kann, bevor umbenannt wird.



PS: du läßt doch dein Programm erstmal nur über ein Testverzeichnis laufen, bzw. hast dir von den Dateien ein Backup gemacht?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  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 03:02 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