Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Teilstring löschen:was ist an meiner Delete-Funktion falsch? (https://www.delphipraxis.net/118957-teilstring-loeschen-ist-meiner-delete-funktion-falsch.html)

juergen 18. Aug 2008 15:02


Teilstring löschen:was ist an meiner Delete-Funktion falsch?
 
Hallo zusammen,

ich möchte die Dateinamen meiner MP3-Sammlung einheitlich setzen.
Meine jetzigen Dateinamen setzen sich entweder aus
<Interpret> - <Titel>
oder
<Interpret> - <Album> - <Titel>
zusammen.
Sofern vorhanden, soll der Teilstring <Album> nun gelöscht werden.
Der nachfolgende Code wird erst mal als Test auf ein Edit angewendet...
Als "Delimiter" ist das '- ' zu interpretieren.
Um zu prüfen ob die Datei überhaupt eine Albuminformation hat (2.Delimiter), verwende ich
Delphi-Quellcode:
...
var s : string;
begin
s:= Edit1.Text;
if PosEx('- ', s,(Pos('- ', s))+1) > 0
...
Um den Teilstring <Album> zu löschen habe ich die Überlegung mit Pos die "Startposition" des ersten Delimiter zu ermitteln.
Mit PosEx habe ich ja schon die Position des 2. Delimter.
Somit lässt sich der Index(Start) der Delete-Funktion setzen und die Länge (Count) der zu löschenden Zeichen.
Leider bekomme ich die Delete-Funktion nicht ans Laufen.
Delphi-Quellcode:
Edit2.Text := Delete(s, Pos('- ', s), PosEx('- ',s,(Pos('- ',s))+1) - Pos('- ', s) )
Als Fehlermeldung kommt:
Zitat:

[DCC Fehler] Test.pas(39): E2010 Inkompatible Typen: 'string' und 'procedure, untyped pointer or untyped parameter'
Kann hier jemand von Euch erkennen wo mein Fehler liegt?

Danke schon mal vorab!

stahli 18. Aug 2008 15:12

Re: Teilstring löschen:was ist an meiner Delete-Funktion fal
 
Delete ist eine Prozedur und liefert das Ergebnis im ersten Parameter zurück (ändert also den Wert direkt in S).
Der Übersichtlichkeit halber würde ich die Positionen vorher in Variablen speichern. Das spart u.U. auch mehrfache Berechnungen (auch wenn das praktisch nicht wirklich merkbar sein wird ;-) ).

juergen 18. Aug 2008 15:21

Re: Teilstring löschen:was ist an meiner Delete-Funktion fal
 
Hallo Stahli,

inzw. hatte ich die 2 Postionen schon in Variablen gespeichert, war mir selbst auch zu unübersichtlich. :zwinker:
Zitat:

Zitat von stahli
Delete ist eine Prozedur und liefert das Ergebnis im ersten Parameter zurück (ändert also den Wert direkt in S).

:wall: manchmal sieht man den Wald vor lauter Bäumen nicht!

Habe nun die Zuweisung raus genommen und es funktioniert.
Schade, die Fehlermeldung hatte ich in eine ganz andere Richtungen gedeutet.

Danke für deinen Hinweis!

DeddyH 18. Aug 2008 17:53

Re: Teilstring löschen:was ist an meiner Delete-Funktion fal
 
Zitat:

Zitat von juergen
Schade, die Fehlermeldung hatte ich in eine ganz andere Richtungen gedeutet.

Nö, die war IMHO eindeutig und vollkommen korrekt :zwinker:

marabu 18. Aug 2008 18:08

Re: Teilstring löschen:was ist an meiner Delete-Funktion fal
 
Hallo Jürgen,

nur am Rande: Ich würde den neuen Dateinamen nicht aus dem alten Dateinamen herleiten, sondern den neuen Dateinamen über einen Format-String aus den Tags der MP3-Dateien bilden. Einmal implementiert kannst du dann deine Dateinamen jederzeit nach Belieben normieren.

Freundliche Grüße

juergen 18. Aug 2008 20:49

Re: Teilstring löschen:was ist an meiner Delete-Funktion fal
 
Hallo Achim,

deinen Vorschlag hatte ich schon vor einigen Wochen umgesetzt. :mrgreen:
(die Dateinamen als auch die ID3-Tags waren/sind zu großen Teilen eine Katastrophe, letztendlich war aber das Bilden des Dateinamens aus den ID3-Tags das kleinere Übel)
Beim Bearbeiten der Dateien konnte mir dann der Total Commander gute Dienste leisten.

Nun sind noch eine ganze Menge an Dateien übrig, welche "mit Hand" bearbeitet werden müssen, also mit Delphi.
Ich erstelle mir hierzu eine "Maskierung", so dass ich von allen Dateien nur die lade, welche einem bestimmten Muster entsprechen.
Dazu erstelle ich "on the fly" die Routine um den Dateinamen entsprechend anzupassen.
Spaß macht das nicht :zwinker: , bietet mir aber gute Lerneffekte für die copy, Delete, Pos, PosEx, LastDelimiter, StringReplace, Length Funktionen.

Grüße
Jürgen


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:23 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