O co chodzi?
Mam 2 listy: najnowsze i piosenki. W tej pierwszej są zawarte numery wybranych piosenek, a w drugiej informacje wszystkich piosenek. Problem polega na tym, aby skopiować adresy tylko plików z listy najnowsze. Niby proste, ale dosyć kłopotliwe.
Przykładowo:
z pierwszej listy mamy: <key>Track ID</key><integer>6889</integer>
a z drugiej:
<key>6889</key>
<dict>
<key>Track ID</key><integer>6889</integer>
<key>Name</key><string>492 - Santana - Evil Ways</string>
<key>Artist</key><string>Various Artists</string>
<key>Album</key><string>Bacobens Rock Top 500</string>
<key>Genre</key><string>Rock</string>
<key>Part of Gapless Album</key><false/>
<key>Compilation</key><false/>
<key>Track Type</key><string>File</string>
<key>Date Added</key><date>2011-05-30'T'21:40:42</date>
<key>Date Modified</key><date>2008-10-09'T'00:54:36</date>
<key>Location</key><string>file://localhost/D%3A/ipod/Music/Various%20Artists/Bacobens%20Rock%20Top%20500/492%20%2D%20Santana%20%2D%20Evil%20Ways%2Emp3</string>
</dict>
i tylko interesuje nas 2 ostatnie linijki czyli adres piosenki :)
Problem?
Doszedłem do momentu, gdzie mamy wpisane w tablicę numery piosenek co nas interesują. Z kopiowaniem adresu zaczyna być problem, bo kopiuje adres tylko 1 piosenki i do tego nie patrzy na jej numer.
W załączniku źródła + listy
Kod całego programu:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, StrUtils;
type
TForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
Memo2: TMemo;
Memo3: TMemo;
Button2: TButton;
Memo4: TMemo;
Button3: TButton;
Memo5: TMemo;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
a : String;
d,w:array[0..1000] of String;
j:Integer;
implementation
{$R *.dfm}
function EN( sChaine: String ): String ; //rozpoznawanie liczb
var //zamienianie wszystkiego oprocz liczb na ,
i: Integer ;
begin
Result := '' ;
for i := 1 to length( sChaine ) do
begin
if sChaine[i] in ['0'..'9'] then
Result := Result + sChaine[i]
else Result := Result + ',';
end ;
end ;
procedure TForm1.Button1Click(Sender: TObject);
var i:Integer;
begin
Memo2.Lines.Add(EN(Memo1.Lines.Text));
end;
procedure TForm1.Button2Click(Sender: TObject); //dodawanie interesujacych nas liczb do tablicy
var i: Integer;
begin
a:=Memo2.Lines.Text;
j:=0;
for i:=1 to length(Memo2.Lines.Text) do
begin
if a[i] <> ',' then
begin
d[j]:= d[j]+a[i];
if Memo2.Lines.Text[i+1] = ',' then j:=j+1;
end;
end;
for i:=0 to j do Memo3.Lines.Add(d[i]);
end;
procedure TForm1.Button3Click(Sender: TObject); //kopiowanie adresow z memo4
var i,k,x,l : Integer;
b:String;
begin
b:= Memo4.Lines.Text;
l:=0;
//Memo5.Lines.Add(IntToStr(j));
for l:= 0 to j do
begin
//Memo5.Lines.Add(IntToStr(x));
for x:=PosEx('file://',b,Pos(d[l],b)) to PosEx('</string>',b,PosEx('file://',b,Pos(d[l],b)))-1 do
begin
w[l] := w[l] + b[x];
end;
end;
for i:= 0 to l do Memo5.Lines.Add(w[i]);
// Memo5.Lines.Add(IntToStr(l));
end;
end.