AGB  ·  Datenschutz  ·  Impressum  







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

String Formatierung

Ein Thema von Wishmaster · begonnen am 11. Jun 2008 · letzter Beitrag vom 15. Jun 2008
Antwort Antwort
Wishmaster

Registriert seit: 14. Sep 2002
Ort: Steinbach, MB, Canada
301 Beiträge
 
Delphi XE2 Architect
 
#1

String Formatierung

  Alt 11. Jun 2008, 11:03
Hi

brauche mal wieder eure Hilfe bei einem kleinem Problem. Ich habe mir en CD-Ripper/Converter geschrieben.

das Problem ist ich komme bei der File Formatierung nicht weiter!

Hier ein kleines Beispiel wie ich es mir Vorstelle.

Delphi-Quellcode:
{
%1 = Artist
%2 = Title
%3 = Album
%4 = Year
%5 = Track
%6 =  -

fTag =    'Sylver,The End,Crossroads,12,2006,Pop';
fFormat =  '%1%6%2';
}


Function Get_Filename(fFormat, fTag) : String;
begin
  // ?

         // %1%6%2;
  result:= 'Sylver - The End'
 or // %5%6%1%6%2
  result:= '12 - Sylver - The End';
end;

für das Separieren des (fTag) habe ich schon ne lösung.


Delphi-Quellcode:
type
  {$IFNDEF COMPILER4_UP}
  TSysCharSet = set of Char;
  {$ENDIF}
  TCharSet = TsysCharSet;


function ExtractDelimited(N: Integer; const S: string;
  const Delims: TCharSet): string;
var
  CurWord: Integer;
  I, Len, SLen: Integer;
begin
  CurWord := 0;
  I := 1;
  Len := 0;
  SLen := Length(S);
  SetLength(Result, 0);
  while (I <= SLen) and (CurWord <> N) do
  begin
    if S[I] in Delims then
      Inc(CurWord)
    else
    begin
      if CurWord = N - 1 then
      begin
        Inc(Len);
        SetLength(Result, Len);
        Result[Len] := S[I];
      end;
    end;
    Inc(I);
  end;
end;



var c : TCharSet;
begin
   c:= [','];
  result:= ExtractDelimited(1, fTag, c)

thx
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#2

Re: String Formatierung

  Alt 11. Jun 2008, 12:00
Moin, Moin,

unter der Voraussetzung, dass die Reihenfolge der Einträge in FTag immer gleich ist und du die Benennung deiner Formatangabe %1..%x an die Reihenfolge der Einträge in FTag anpasst, sollte folgendes funktionieren ...

Delphi-Quellcode:
function Get_Filename(fFormat,fTag:String):String;
var SL : TStringList;
    i : Integer;
begin
  SL:=TStringList.Create;
  
  try
    SL.SetText(pchar(StringReplace(fTag,',',#13,[frReplaceAll]);

    i:=0;
    repeat
      Result:=Result+SL[pred(StrToInt(copy(fFormat,i+2,1)))];
      inc(i,2)
      until i=length(fTag)

  finally
    SL.Free
    end

end;
// edit: Na, ich sehe gerade den %6 für den Bindestrich, das muss natürlich noch eingebaut werden. Sollte aber kein Problem darstellen ...
Ralph
  Mit Zitat antworten Zitat
Wishmaster

Registriert seit: 14. Sep 2002
Ort: Steinbach, MB, Canada
301 Beiträge
 
Delphi XE2 Architect
 
#3

Re: String Formatierung

  Alt 11. Jun 2008, 21:10
Hi

Danke für die Antwort!

Theoretisch funzt das so, frReplaceAll muss rfReplaceAll sein
ich muss daran nur noch ein wenig arbeitn, ich bekomme ne Error Msg.
('' Is not a valid integer value)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: String Formatierung

  Alt 11. Jun 2008, 21:17
Dann scheint es nicht als ein solcher erknnt zu werden. Verwende besser TryStrToInt() oder StrToIntDef()
Markus Kinzler
  Mit Zitat antworten Zitat
Wishmaster

Registriert seit: 14. Sep 2002
Ort: Steinbach, MB, Canada
301 Beiträge
 
Delphi XE2 Architect
 
#5

Re: String Formatierung

  Alt 14. Jun 2008, 12:52
Hi

ich habe es zum laufen gekriegt.

Hier ist meine Lösung

Delphi-Quellcode:

function StringToFilename(fFormat, fTag : String): String;
var SL : TStringList;
    i : Integer;
    s : String;
begin
  SL:= TStringList.Create;
  try
    SL.SetText(pchar(StringReplace(fTag, ',', #13, [rfReplaceAll])));

  for I := 1 to Length(fTag) do { TODO : Length bug }
   begin
    if Copy(fFormat, i, 2) = '%1then
     s:= s + SL[pred(StrToInt(copy(fFormat, i + 1, 1)))]; // Artist

    if Copy(fFormat, i, 2) = '%2then
     s:= s + SL[pred(StrToInt(copy(fFormat, i + 1, 1)))]; // Title

    if Copy(fFormat, i, 2) = '%3then
     s:= s + SL[pred(StrToInt(copy(fFormat, i + 1, 1)))]; // Album

    if Copy(fFormat, i, 2) = '%4then
     s:= s + SL[pred(StrToInt(copy(fFormat, i + 1, 1)))]; // Year

    if Copy(fFormat, i, 2) = '%5then
     s:= s + SL[pred(StrToInt(copy(fFormat, i + 1, 1)))]; // Track

    if Copy(fFormat, i, 2) = '%6then
     s:= s + SL[pred(StrToInt(copy(fFormat, i + 1, 1)))]; // Genre

    if Copy(fFormat, i, 2) = '%7then
     s:= s + SL[pred(StrToInt(copy(fFormat, i + 1, 1)))]; // ' - '
   // or s:= s + ' - '
   end;
  finally
    Result:= s;
    SL.Free;
   end
end;


Thx
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#6

Re: String Formatierung

  Alt 14. Jun 2008, 14:02
Hallo,

das geht auch mit benannten Variablen:

Delphi-Quellcode:
function Substitute(const template: string; info: TStrings): string;
var
  iNext, iPos, iLen: Integer;
  bName: Boolean;
  s: string;
begin
  Result := '';
  iPos := 1;
  bName := False;
  while iPos <= Length(template) do
  begin
    iNext := {StrUtils.}PosEx('%', template, iPos);
    iLen := {Math.}IfThen(iNext = 0, Succ(Length(template)) - iPos, iNext - iPos);
    s := Copy(template, iPos, iLen);
    iPos := IfThen(iNext = 0, Succ(Length(template)) {0}, Succ(iNext)); // EDIT
    if bName then
      if s = ''
        then Result := Result + '%'
        else Result := Result + info.values[s]
      else Result := Result + s;
    bName := not bName;
  end;
end;

// Test
procedure TDemoForm.ButtonClick(Sender: TObject);
var
  info: TStrings;
begin
  info := TStringList.Create;
  info.Values['artist'] := 'Don Robertson';
  info.Values['title'] := 'The Happy Whistler';
  Edit.Text := Substitute('%artist% - %title%', info);
  info.Free;
end;
Grüße vom marabu
  Mit Zitat antworten Zitat
Wishmaster

Registriert seit: 14. Sep 2002
Ort: Steinbach, MB, Canada
301 Beiträge
 
Delphi XE2 Architect
 
#7

Re: String Formatierung

  Alt 15. Jun 2008, 11:30
Hi

die Lösung ist auch nicht schlecht, allerdings ich möchte dem Benutzer die Möglichkeit geben die Parameter selbst einzutragen (tippen). Mit deiner Lösung wen du dich vertippst oder absichtlich etwas falsches einträgst (Beispiel: '%artist% - %title' oder '%artist% -' oder einfach irgendein Text ) stürzt das Programm ab.

Ich sehe nur eine einzige Lösung für deinen Code, ich muss dem Benutzer ne liste mit fertigen tags
%title% Zurverfügungstellen die er dann per Knopfdruck in eine liste einträgt/löscht und ich dann daraus einen fertigen string mache. Das oder dein Code muss verbessert werden, er miss den string nach Gültigkeit prüfen.


thx
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#8

Re: String Formatierung

  Alt 15. Jun 2008, 11:53
Hallo,

Zitat von Wishmaster:
... die Lösung ist auch nicht schlecht ...
danke für dein freundliches Urteil.

Zitat von Wishmaster:
... allerdings ich möchte dem Benutzer die Möglichkeit geben die Parameter selbst einzutragen (tippen). ...
Gerade deshalb dachte ich sofort an Namen statt Nummern - man tippt etwas mehr, aber muss nicht ständig überlegen, ob %3 Artist, Album oder Konfession des Produzenten ist.

Zitat von Wishmaster:
... Mit deiner Lösung wen du dich vertippst oder absichtlich etwas falsches einträgst (Beispiel: '%artist% - %title' oder '%artist% -' oder einfach irgendein Text ) stürzt das Programm ab. ...
Da hast du recht, da habe ich geschludert. Ich verbessere das einfach mal im Beitrag #6.

Freundliche Grüße
  Mit Zitat antworten Zitat
Wishmaster

Registriert seit: 14. Sep 2002
Ort: Steinbach, MB, Canada
301 Beiträge
 
Delphi XE2 Architect
 
#9

Re: String Formatierung

  Alt 15. Jun 2008, 14:30
Hi

Besser! wie es aussieht funzt es jetzt.

Besten dank für deine Hilfe!!!
  Mit Zitat antworten Zitat
Antwort Antwort


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 17: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