Entwickler-Ecke

Sonstiges (Delphi) - Probleme beim Zusammenfügen von Strings


Feindsender64.3 - Fr 10.02.06 19:09
Titel: Probleme beim Zusammenfügen von Strings
Hi
Habe ein (für mich) ziemlich ungewöhnliches Problem und zwar möchte ich einfach einen String aus mehreren Teilstrings zusammensetzen. Kann eigentlich nicht so schwer sein, oder?
Dachte ich auch, bis ich folgenden Code schrieb:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
var element:integer;
    t,t2,ar,al:string; )

for element := 0 to ListBox1.Items.Count do begin
    ReadID3(ListBox1.Items.Strings[element]);

    Label2.Caption := ID3Tag.Album;
    Label6.Caption := ID3Tag.Artist;
    t := Pfad2.Text;               // zB. 'C:\musik'
    ar := ID3Tag.Artist;           // zB. 'Subway'
    al := ID3Tag.Album;            // zB. 'Hochzeit'

    t2 := t + '\' +ar+ '\' +al+ '\' +ExtractFileName(ListBox1.Items.Strings[element]);
    sleep(2000);                   // fürs Debugging, kleine Bremse
    edit1.Text := t2;

    count.Caption := inttostr(element);
    Application.ProcessMessages;
  end;


Das Problem: Im Editfeld steht (für das Beispiel) jetzt nur 'C:\musik\Subway'... alles danach fehlt.
Falls es von Interesse sein sollte, das Auslesen der ID3Tags geschieht mithilfe des Codes der auf dsdt unter Tipps & Tricks zu finden ist.

Ich hoffe jemand von euch kann mir da ganz schnell helfen. Bin mir fast sicher es ist nur ne Kleinigkeit die ich nicht beachtet habe ...

MFG


MSCH - Fr 10.02.06 19:34
Titel: Re: Probleme beim Zusammenfügen von Strings
user profile iconFeindsender64.3 hat folgendes geschrieben:
Hi


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
var element:integer;
    t,t2,ar,al:string; )

for element := 0 to ListBox1.Items.Count[b]-1[/b] do begin
    ReadID3(ListBox1.Items.Strings[element]);

    Label2.Caption := ID3Tag.Album;
    Label6.Caption := ID3Tag.Artist;
    t := Pfad2.Text;               // zB. 'C:\musik'
    ar := ID3Tag.Artist;           // zB. 'Subway'
    al := ID3Tag.Album;            // zB. 'Hochzeit'

    t2 := t + '\' +ar+ '\' +al+ '\' +ExtractFileName(ListBox1.Items.Strings[element]);
    sleep(2000);                   // fürs Debugging, kleine Bremse
    edit1.Text := t2;

    count.Caption := inttostr(element);
    Application.ProcessMessages;
  end;



denke daran, dass
- Listen immer bei 0 bis n-1 laufen (siehe Quelltext)
- und vielleicht dein Edit-Feld eine Längenbegrenzung hat?

grez
MSch


Feindsender64.3 - Fr 10.02.06 19:54

ups.. ja das -1 is mir wohl in der hektik entfallen.
also längenbegrenzung hat das teil nicht. mir ist aber im debugmodus folgedes aufgefallen: Die Rückgabewerte der Funktionen von ID3Tag enthalten solche Scherze (Beispiel für .Artist):
>> 'Subway to Sally'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 <<
Kann das sein dass er durch diese Nullzeichen, oder was auch immer, Probleme hat?
Quasi: Wie krieg ich das wieder weg?


MSCH - Fr 10.02.06 20:00

nullterminierte Strings!
versuchs mit T:= strpas(variable)...

grez
msch


Feindsender64.3 - Fr 10.02.06 20:10

habe folgendes so abgeändert:

Delphi-Quelltext
1:
2:
    ar := strpas(ID3Tag.Artist);
    al := strpas(ID3Tag.Album);


bekomme daraufhin vom Compiler eins an Deckel: Nichtkompatible Typen 'ShortString' und 'PAnsiChar' ..

achja.. vllt hilft euch das hier: http://www.dsdt.info/tipps/?id=349


Feindsender64.3 - Sa 11.02.06 13:52

habe mich nun nach mehrmaligem Herumexperimentieren mit der Lösung zufreiden gegeben, dass ich den nullterminierten String in ein Label schreib und es im nächsten Schritt wieder aus Selbigem in einen String lese. Klappt so weit eigentlich wunderbar :)
Ich denke mal damit ist die Frage beantwortet.

Danke für eure Mithilfe.