Autor Beitrag
patrick dee
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 311

Win 98SE, WinXP
D3,D6
BeitragVerfasst: Mi 08.03.06 08:56 
Hi Leute,

hoffe hier kann mir jemand weiterhelfen.Ich habe verschiedene Playlisten, die so aussehen :

0 Uhr

5555-69 HERZ 00:04
5064-06 JEDER HAT EIN RECHT AUF LIEBE WIND 05:14
5193-17 SING ME A RAINBOW DR HOOK 02:31
5022-12 IMMER NUR DU. NINA FALK 02:55
5555-72 VERFÜHRUNG 00:05
5109-19 SHE S ALWAYS A WOMAN BILLY JOEL 03:16
5143-19 *BERÜHRUNG EDMUND 02:51
5555-55 SONGS ZUM TRÄUMEN .... 00:17

1 Uhr

5555-58 LIEBLINGSSONG 00:13
5068-13 SO WIE SCHWEBEN BURKHARD BROZAT 03:10
5186-06 NOBODY DOES IT BETTER CARLY SIMON 03:255188-14 ENSEMBLE ART SULLIVAN 03:43
5276-12 MI AMOR JEANNINE 03:30
5118-03 HOLD ME THRILL ME KISS ME GLORIA ESTEFAN 03:19

2 Uhr

5184-03 KLEINE SEELENFEUER MICHELLE 04:08
5098-06 GEE BABY PETER SHELLEY 02:54
5555-20 TAG UND NACHT (VERS. 2) 00:09
5237-03 ICH LIEG WACH CARRIERE 04:08
5103-15 HELP ME MAKE IT THROUGH THE NIGHT JOHN HOLT 03:05
5151-03 *NIGHT RIDE DAVID WARWICK 03:16

abgelegt sind die als 06-03-06.pl1

also nach Tagesdatum.
Wie kriege ich es hin, das wenn ich einen button drücke der Tag aufrufen heißt, mir immer zur aktl Stunde die Liste geladen wird. Also um 6 Uhr nur der Teil der Liste zwischen 6 und 7 Uhr in die ListBox. Ist es genau 7 Uhr, dann soll automatisch die Liste von 8 bis 9 Uhr geladen werden. Wenn es 23:59:59 ist soll der die Liste für den neuen Tag geladen werden usw.

Aufrufen tue ich die Listen bisher so :


ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
procedure TfMain.ListeProgramm1rc11Click(Sender: TObject);
var
  datum : string;
begin
  PlayListBox1.Visible := True;
  PlayListBox2.Visible := False;
  PanelProgramm.Caption := 'P 1';
  datum:= FormatDateTime('dd-mm-yy',NOW);
    try
    fMain.PlayListBox1.Items.LoadFromFile( tools_form.edit1.text + datum + '.rc1');
      PlayListBox1.ItemIndex := + 2;
     except
      MessageDlg('Es wurde keine Playliste für Heute gefunden ! ', mtConfirmation, [mbOK], 0);
     end;
end;


allerdinsg läd die ListBox den ganzen Tag. Hoffe jemand kann mir da weiterhelfen.

Danke
Gruß

Patrick

_________________
Glauben heißt nichts wissen ...
digi_c
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1905

W98, XP
D7 PE, Lazarus, WinAVR
BeitragVerfasst: Mi 08.03.06 09:16 
Hier nurmal die Vorgehensweise wie ich es machen würde:
  1. Stunde des Tages bekommen (schau mal in die Hilfe zu der Unit dateutils
  2. Zeile aus Playlist einlesen und überprüfen ob 'Uhr' vorkommt
  3. Wenn dann die folgenden Zeilen in Stringliste einlesen bis eine Leerzeile kommt
  4. Das ganze bis Dateiende


Du kennst ja sicherlich die .PLS Listen, die Winamp,WMP,... benutzen, vielleicht wäre es einfacher für jeden Zeitabschnitt eine solche Datei zu benutzen, die kann man dann nochmal wiederverwenden und es gibt bestimmt schon fertige Parser dafür.
patrick dee Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 311

Win 98SE, WinXP
D3,D6
BeitragVerfasst: Mi 08.03.06 09:53 
.. habe etwas probiert, aber irgendwie hat das noch nicht hin. Ist nichts zu sehen in der Liste.

ausblenden volle Höhe 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:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
procedure TForm1.Button4Click(Sender: TObject);
var
  Found : boolean;
      i : integer;
  datum : string;
begin
  datum:= FormatDateTime('dd-mm-yy',NOW);
  PlayListBox1.Items.LoadFromFile( Edit1.text + datum + '.rc1' );
  Found := False;
  begin
    with PlayListBox1.Items do
    begin
      BeginUpdate;
      Clear;
      for i := 0 to PlayListBox1.Count - 1 do
        Add( PlayListBox1.Items[ i ]);
      EndUpdate;
    end;
    Abort;
  end;
  i := 0;
  with PlayListBox1.Items do
  begin
    BeginUpdate;
    Clear;
    while not Found and( i < PlayListBox1.Count )do
    begin
      if( Pos( EditAktlStunde.Text, PlaylistBox1.Items[ i ]) > 0 )then
      begin
        Inc( i );
        while not( Pos( ' Uhr', PlayListBox1.Items[ i ]) > 0 )do
        begin
          Add( PlaylistBox1.Items[ i ]);
          Inc( i );
        end;
        Found := True;
      end
      else
        Inc( i );
    end;
    inc (i);
    PlayListBox1.ItemIndex := 0;  //Position in der Liste 1 Stelle
   EndUpdate;

  end;
end;



Über einen timer hole ich mir das Datum und kopiere die ersten zwei Zeichen raus für die
aktuelle Stunde.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
procedure TForm1.TimerUhrTimer(Sender: TObject);
begin
EditUhrzeit.Text := TimeToStr(Now);
EditAktlStunde.Text:= (copy(EditUhrzeit.Text,0,2));
end;


Irgendwo habe ich noch nen Knoten drinnen.

Wer kann mir weiterhelfen ?????????

Danke

Patrick

_________________
Glauben heißt nichts wissen ...
digi_c
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1905

W98, XP
D7 PE, Lazarus, WinAVR
BeitragVerfasst: Mi 08.03.06 14:31 
Wieso baust du die Liste auf, löschst sie wieder, baust sie in der 2. Schleife nochmal auf ?
digi_c
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1905

W98, XP
D7 PE, Lazarus, WinAVR
BeitragVerfasst: Mi 08.03.06 21:35 
Also dein Code korrigieren, vermag ich so auf die Schnelle nicht, da kann auch ich mich heute nichtmehr reindenken, hier mal was zusammengeschustertes:
ausblenden 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:
uses dateutils
....
procedure getcurrenttracks();
var
tracks:TStringList;
begin
tracks:=TStringList.Create;
AssignFile(F, OpenDialog1.FileName);
Reset(F);
repeat // alle Zeilen durchgehen
Readln(F, tmpS);
if pos(tmpS,'Uhr')>0 then //UHR Zeile gefunden
begin
  if houroftheday(now) = strtoint(trim(copy(0,pos(sTmp,'UHR'))) then // ist das jetzt?
  begin
    Readln(F, tmpS); //Leerzeile
    repeat
      tracks.Add(tmpS);
    until length(tmpS)=0 //bis abschließende Leerzeile
  end;
end;
until EOF
CloseFile(F);
end;


Ist aber wirklich nur spekulativ, was die Zahlen bei den tracks sollen, weiß ich z.B. nicht.