Entwickler-Ecke

Sonstiges (Delphi) - Playliste erstellen aus einer anderen Text Datei


patrick dee - Di 05.06.07 12:30
Titel: Playliste erstellen aus einer anderen Text Datei
Hallo Leute,

Es geht um eine Erstellung einer Playliste. Ich habe eine fertige die immer mit dem Tagesdatum abgespeichert ist z.b. 05-06-07.ac1 Die Einträge sehen in dieser Liste so aus :


Delphi-Quelltext
1:
2:
3:
4:
5:
          12 Uhr
5124-12 SHOUT SHOUT ROCKY SHARPE 02:44
5172-14 IT S SUCH A SMALL WORLD RODNEY CROWELL 03:18
5034-16 DON T DREAM IT S OVER CROWDED HOUSE 03:50
5128-02 EIN ENGEL WOHNT UNTERM DACH HOFFMANN & HOFFMANN 03:33



Wie kann ich nun diese List in die ListBox1 laden, das die Einträge so aussehen :


Delphi-Quelltext
1:
2:
3:
4:
5:
          12 Uhr
5124-12 ROCKY SHARPE          SHOUT SHOUT                  02:44
5172-14 RODNEY CROWELL        IT S SUCH A SMALL            03:18
5034-16 CROWDED HOUSE         DON T DREAM IT S OVER        03:50
5128-02 HOFFMANN & HOFFMANN   EIN ENGEL WOHNT UNTERM DACH  03:33


Wie man sehen kann, steht nach der Nummer der Interpret dann der Titel und die Länge.
Und das mit einem Abstand dazwischen um es besser lesen zu können.

Ich kann die Erstellung der 05-06-07.ac1 Files nicht ändern ist vorgegeben. Habe mir auch schon überlegt das man einen Button einbaut und wenn man auf diesen drückt wird die 05-06-07.ac1 von oben bis unten durchlaufen und jeder Eintrag in eine 2 Liste (StrList)gelegt.Wenn der Eintrag mit einer 5 beginnt soll die Trennung zwischen den Einträgen vorgenommen werden. Als vergleich könnte man in der Datenbank - ist Paradox - nachsehen und Eintragen.Evtl das ganze unter Tagesdatum ( Beispiel 05-06-07.pc1 ) abzuspeichern.

Habe aber auch alle Titel als Musik.Txt gespeichert. Wäre es da einfacher diese nachschau zu machen ? also ich suche wie geschrieben einen Weg dies Trennung durchzuführen.

Hoffe sehr das mir jemand dabei Helfen kann das umzusetzen.

Vielen Dank an alle schon mal im Voraus

Gruß Patrick


Gausi - Di 05.06.07 13:27

Ohne Zusatzinformationen wirst du das nicht hinbekommen. Woher soll man denn wissen, welches Leerzeichen den Künstler vom Titel trennt?

Ansonsten: Mit Copy kann man Teile eines Strings in einen neuen kopieren. Wenn die Zeitangaben und die Zahlen am Beginn jeder Zeile immer dieselbe Länge haben, sollte zumindest dieser Teil recht einfach gehen.


patrick dee - Di 05.06.07 14:12

Hei Gausi

Danke erstmal für deine Antwort.
Ja die ersten sieben Zeichen sind immer gleich lang

5100-01
5525-08
5689-09 usw.

LG Patrick


jakobwenzel - Di 05.06.07 14:15

Es geht darum, z.B. "Shout Shout" von "Rocky Sharpe" zu trennen.
Das Programm kann ja nicht wissen, dass es so heißt und nicht etwa so:
"Shout" von "Shout Rocky Sharpe", oder "Shout Shout Rocky" von "Sharpe".


patrick dee - Di 05.06.07 14:16

NACHTRAG :

In der Musik.txt stehen alle Musiktitel die ich habe so drinnen :

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
5072-17#NICKI#WIE IMMER#04:39#07#00:00#04:33##
5072-18#NICKI#HAST DU HEUTE ZEIT#03:28#07#00:00#03:23##
5072-19#NICKI#GOODBYE JANE#03:20#07#00:00#03:18##
5072-20#NICKI#GANZ TIEF INS HERZ#03:54#12#00:00#03:52##
5072-21#NICKI#HAST A BISSERL ZEIT FÜR MI#04:07#37#00:00#04:01##
5072-22#DRAFI DEUTSCHER#SHAKE HANDS#02:14#05#00:00#02:14##
5073-01#NICKI#NOBODY S PERFECT#03:57#00#00:00#03:51##
5073-02#PATRICK LINDNER#DIE KLEINEN DINGE DES LEBENS#03:20#07#00:00#03:18##
5073-03#ANNIE REISLER#GUARDIAN ANGEL#03:17#08#00:00#03:15##
5073-06#DINO PARISE#BELLA ITALIA {RADIO VERSION)#03:13#00#00:00#03:11##
5073-07#MARK MERRITT#HOME#03:42#15#00:00#03:39##
5073-08#DRAFI DEUTSCHER#WENN MAN LIEBT#03:56#31#00:00#03:55##
5073-09#DRAFI DEUTSCHER#KEEP SMILING#02:08#09#00:00#02:07##
5073-10#DRAFI DEUTSCHER#CINDERELLA BABY#02:23#08#00:00#02:22##
5073-11#DRAFI DEUTSCHER#HEUTE MALE ICH DEIN BILD#02:03#08#00:00#02:02##
5073-12#MAX GREGER JR#YAKETY MAX#03:00#00#00:00#02:59##
5073-13#BRUNNER & BRUNNER#NUR DIE LIEBE UND DER ROCK#03:32#11#00:00#03:30##
5073-14#COSTA CORDALIS#HIMMEL AUF ERDEN#03:53#16#00:00#03:51##
5073-16#LINDA FELLER#ANDERE MÜTTER HABEN AUCH#03:31#08#00:00#03:28##
5073-17#CARRIERE#MICHELLE.#03:48#17#00:00#03:45##
5073-18#HENDRIK BRUCH#SOLANGE ICH NOCH TRÄUMEN#03:26#00#00:00#03:24##
5073-19#BIANCA#KINDER DER STERNE#03:28#11#00:00#03:27##
5073-20#TOM ASTOR#KLEINER REBELL#02:57#05#00:00#02:53##
5073-21#FRANK SCHRÖDER#DU UND ICH IM ALTEN VW POPPEN#03:34#15#00:00#03:32##
5074-01#JULIO IGLESIAS#CON LA MISMA PIEDRA#03:56#24#00:00#03:53##
5074-02#JULIO IGLESIAS#ESA MUJER#04:03#20#00:00#04:00##



Dachte man könnte die 05-06-07.ac1 liste durchsuchen und alle Einträge in die LsitBox2 schreiben. Wenn ein Eintrag mit beginnender 5 vorkommt in die Musik.Txt schauen und übernehmen. Durch die Trennungszeichen wäre es doch möglich die Abstände zu realisieren - ODER ?

lg Patrick


patrick dee - Mi 06.06.07 12:39

Hallo Leute,

hat keiner eine Idee für mich wie ich das obige Problem Lösen kann ? :?:

Danke

Patrick


Stefan.Buchholtz - Mi 06.06.07 13:06

Anhand des Trennzeichens kannst du natürlich problemlos die Spalten auftrennen. Die Listbox kann aber keine Spalten darstellen und eine Ausrichtung mit Leerzeichen würde nur funktionieren, wenn du einen Zeichensatz mit fester Breite wie Courier New verwendest. Für eine mehrspaltige Darstellung bieten sich TStringGrid oder TListView an.
Zum Aufsplitten der Zeile in die einzelnen Spalten habe ich hier noch eine Utility-Funktion rumfliegen:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
function SplitFields(const ASource: String;
                     const ADelim: Char): TStringDynArray;
var
  idx     : Integer;
  arrSize : Integer;
  p       : Integer;
  len     : Integer;
begin
  len := Length(ASource);
  p := 1;
  idx := 0;
  arrSize := 10;
  SetLength(Result, arrSize);

  Result[idx] := '';
  while p <= len do
  begin
    if ASource[p] = ADelim then
    begin
      Inc(idx);
      if idx >= arrSize then
      begin
        arrSize := arrSize * 2;
        SetLength(Result, arrSize);
      end{ if }
      Result[idx] := '';
    end { if }
    else
    begin
      Result[idx] := Result[idx] + ASource[p];
    end{ else }
    Inc(p);
  end{ while }
  Inc(idx);
  SetLength(Result, idx);
end{  SplitFields }


Stefan