Requests naar Tekstbestand schrijven

Voor vragen over Playlist Automation Language.
Plaats reactie
Gebruikersavatar
Adrie
***
Berichten: 51
Lid geworden op: 29 jan 2009, 18:33
SAM-versie: 2020.2
Database: MySQL
Windows: 11
Locatie: Den Haag

Requests naar Tekstbestand schrijven

Ongelezen bericht door Adrie »

Het gaat over het volgend stukje script.

Code: Selecteer alles

PAL.Loop := True;

PAL.LockExecution;
var AQuery : TDataSet;
var Song : TSongInfo;
AQuery := Query('SELECT songlist.*, requestlist.*, requestlist.ID as requestID '
+' FROM songlist, requestlist '
+' WHERE (requestlist.ETA<:now) AND (requestlist.status=''new'') AND (songlist.ID=requestlist.songID) '
+ 'ORDER BY requestlist.ETA ASC '
+' LIMIT 1 ',[Now],True);
if not(AQuery.BOF and AQuery.EOF) then

begin

Song := TSongInfo.Create();
Song['ID'] := AQuery['ID'];
Song['filename'] := AQuery['filename'];
Song['artist'] := AQuery['artist'];
Song['title'] := AQuery['title'];
Song['duration'] := AQuery['duration'];
Song['requestID'] := AQuery['requestID'];
Queue.Add(Song,ipTop);
Queue.AddFile('D:\Mijn muziek\Attentie Speciale aanbieding.mp3',ipTop);
writeln('Verzoek toegevoegd:');
WriteLn(+Song['artist']+' - '+Song['title']);
SaveStringToFile('D:\Mijn downloads\Tijdelijk\Request.txt', Song['artist']+' - '+Song['title']);
ExecSQL('UPDATE requestlist SET status=:status WHERE (songID = :songID) AND ((status=''new'') OR (status=''pending'')) ',['pending',song['ID']]);

end

else
WriteLn('Geen verzoek gevonden');
PAL.UnLockExecution;
AQuery.Free;
Song.Free;

PAL.WaitForTime('+00:00:30');
Op de navolgende regel wordt het tekstbestandje overschreven bij een tweede request.

SaveStringToFile('D:\Mijn downloads\Tijdelijk\Request.txt', Song['artist']+' - '+Song['title']);

Bestaat er een stukje script wat het tekstbestandje (Request.txt) behoud en in een volgende regel in het tekstbestandje nieuwe informatie toevoegt?
Dus als voorbeeld wordt in het tekstbestand geschreven.

Madonna - Borderline

en bij een tweede request in een volgende loop b.v.

Madonna - Borderline
Forrest - Rock The Boat

Alvast bedankt voor het meedenken!
Gebruikersavatar
Wout
Beheerder
Berichten: 3501
Lid geworden op: 03 dec 2007, 14:17
SAM-versie: 2019.3
Database: MariaDB
Windows: 11
Locatie: West-Brabant
Contacteer:

Re: Requests naar Tekstbestand schrijven

Ongelezen bericht door Wout »

Nee, PAL ondersteund dit niet. Althans, ik heb dit niet gevonden of gezien.
Afbeelding
Gebruikersavatar
Adrie
***
Berichten: 51
Lid geworden op: 29 jan 2009, 18:33
SAM-versie: 2020.2
Database: MySQL
Windows: 11
Locatie: Den Haag

Re: Requests naar Tekstbestand schrijven

Ongelezen bericht door Adrie »

Bedankt Wout.
Ik had al van alles geprobeerd en me suf gezocht op internet en hier op het forum.
Groet, Adrie
Gebruikersavatar
Wout
Beheerder
Berichten: 3501
Lid geworden op: 03 dec 2007, 14:17
SAM-versie: 2019.3
Database: MariaDB
Windows: 11
Locatie: West-Brabant
Contacteer:

Re: Requests naar Tekstbestand schrijven

Ongelezen bericht door Wout »

Er is toch een script waarbij regels erbij kan schrijven op de text-bestand.

Code: Selecteer alles

const bannertext_file = 'D:\request.txt';

procedure AddBannerLine(const Line: string);
var
  SL: TStringList;
begin
  // Debug output om te zien wat we ontvangen
  WriteLn('Ontvangen waarde: ' + (Line));

  SL := TStringList.Create;
  try
    // Controleer of de lijn leeg is
    if Trim(Line) = '' then
    begin
      WriteLn('Waarschuwing: Lege regel ontvangen');
      Exit;
    end;

    // Bestandsoperaties
    if FileExists(bannertext_file) then
      SL.LoadFromFile(bannertext_file);

    SL.Add((Line)); // Zorg ervoor dat we een string gebruiken

    try
      SL.SaveToFile(bannertext_file);
      WriteLn('Succesvol opgeslagen: ' + (Line));
    except
      on E: Exception do
        WriteLn('Fout bij opslaan: ' + E.Message);
    end;
  finally
    SL.Free;
  end;
end;

var
  TestValue: string;
begin
  PAL.Loop := False; // Eenmalige uitvoering voor test

  // Duidelijke testwaarden
  TestValue := 'Test regel ' + FormatDateTime('hh:nn:ss', Now);

  try
    AddBannerLine(TestValue);

    WriteLn('Script voltooid om: ' + FormatDateTime('hh:nn:ss', Now));
  except
    on E: Exception do
      WriteLn('Critical error: ' + E.Message);
  end;
end
Afbeelding
Gebruikersavatar
Wout
Beheerder
Berichten: 3501
Lid geworden op: 03 dec 2007, 14:17
SAM-versie: 2019.3
Database: MariaDB
Windows: 11
Locatie: West-Brabant
Contacteer:

Re: Requests naar Tekstbestand schrijven

Ongelezen bericht door Wout »

Aangepast aan je PAL.

Code: Selecteer alles

const bannertext_file = 'D:\request.txt';
var VerzoekQuery : TDataSet;
var Song : TSongInfo;
var TestValue: string;
var SL: TStringList;

procedure AddBannerLine(const Line: string);
begin
	SL := TStringList.Create;

	if FileExists(bannertext_file) then SL.LoadFromFile(bannertext_file);

	SL.Add((Line)); // Zorg ervoor dat we een string gebruiken
	SL.SaveToFile(bannertext_file);
	SL.Free;
end;

PAL.Loop := True; 

	VerzoekQuery := Query('SELECT songlist.*, requestlist.*, requestlist.ID as requestID '
						+' FROM songlist, requestlist '
						+' WHERE (requestlist.ETA<:now) AND (requestlist.status=''new'') AND (songlist.ID=requestlist.songID) '
						+ 'ORDER BY requestlist.ETA ASC '
						+' LIMIT 1 ',[Now],True);
						
	if not(VerzoekQuery.BOF and VerzoekQuery.EOF) then
	begin
		Song := TSongInfo.Create();
		Song['ID'] := VerzoekQuery['ID'];
		Song['filename'] := VerzoekQuery['filename'];

		Queue.Add(Song,ipTop);
		Queue.AddFile('D:\Mijn muziek\Attentie Speciale aanbieding.mp3',ipTop);
		writeln('Verzoek toegevoegd:');
		WriteLn(+VerzoekQuery['artist']+' - '+VerzoekQuery['title']);
		
		TestValue := 'Test regel ' +VerzoekQuery['artist']+' - '+VerzoekQuery['title'];
		AddBannerLine(TestValue);

		ExecSQL('UPDATE requestlist SET status=:status WHERE (songID = :songID) AND ((status=''new'') OR (status=''pending'')) ',['pending',song['ID']]);
	end

	else
		WriteLn('Geen verzoek gevonden');

	VerzoekQuery.Free;
	Song.Free;

	PAL.WaitForTime('+00:00:30');
Afbeelding
Gebruikersavatar
Adrie
***
Berichten: 51
Lid geworden op: 29 jan 2009, 18:33
SAM-versie: 2020.2
Database: MySQL
Windows: 11
Locatie: Den Haag

Re: Requests naar Tekstbestand schrijven

Ongelezen bericht door Adrie »

Ik had echt heel intensief gezocht naar zo'n stukje script en jij schud het zo uit je mouw.
Zeer veel dank, het werkt, echter het aangevraagde nummer wordt in de queue gezet zonder artiest en titel omschrijving.
Het lijkt net een spook nummer: duration ??:??
Het is toch het juiste nummer (song info veld klopt), want het nummer wordt gewoon gedraaid en goed in de historie gezet.
Ik ga er zelf verder mee stoeien want wat jij hebt aangedragen werkt.
Gebruikersavatar
Wout
Beheerder
Berichten: 3501
Lid geworden op: 03 dec 2007, 14:17
SAM-versie: 2019.3
Database: MariaDB
Windows: 11
Locatie: West-Brabant
Contacteer:

Re: Requests naar Tekstbestand schrijven

Ongelezen bericht door Wout »

Adrie schreef: 22 jun 2025, 16:34 Ik had echt heel intensief gezocht naar zo'n stukje script en jij schud het zo uit je mouw.
Zeer veel dank, het werkt, echter het aangevraagde nummer wordt in de queue gezet zonder artiest en titel omschrijving.
Het lijkt net een spook nummer: duration ??:??
Het is toch het juiste nummer (song info veld klopt), want het nummer wordt gewoon gedraaid en goed in de historie gezet.
Ik ga er zelf verder mee stoeien want wat jij hebt aangedragen werkt.
Aha, ik had wat regels eruit gehaald, maar als je ze weer toevoegt, zal het weer werken.

Code: Selecteer alles

Song := TSongInfo.Create();
Song['ID'] := AQuery['ID'];
Song['filename'] := AQuery['filename'];
Song['artist'] := AQuery['artist'];
Song['title'] := AQuery['title'];
Song['duration'] := AQuery['duration'];
Song['requestID'] := AQuery['requestID'];
Afbeelding
Gebruikersavatar
Adrie
***
Berichten: 51
Lid geworden op: 29 jan 2009, 18:33
SAM-versie: 2020.2
Database: MySQL
Windows: 11
Locatie: Den Haag

Re: Requests naar Tekstbestand schrijven

Ongelezen bericht door Adrie »

Klopt Wout, het werkt zo goed.
Ik heb er nog wat mee gestoeid en hier is het eindresultaat voor ander liefhebbers.
Veel plezier ermee. Adrie :D

******************************************************************************************************
const bannertext_file = 'D:\Request.txt'; //naar eigen voorkeur aanpassen
var AQuery : TDataSet;
var Song : TSongInfo;
var Tekst: string;
var SL: TStringList;

procedure AddBannerLine(const Line: string);
begin
SL := TStringList.Create;

if FileExists(bannertext_file) then SL.LoadFromFile(bannertext_file);

SL.Add((Line)); // Zorg ervoor dat we een string gebruiken
SL.SaveToFile(bannertext_file);
SL.Free;
end;

PAL.Loop := True;

AQuery := Query('SELECT songlist.*, requestlist.*, requestlist.ID as requestID '
+' FROM songlist, requestlist '
+' WHERE (requestlist.ETA<:now) AND (requestlist.status=''new'') AND (songlist.ID=requestlist.songID) '
+ 'ORDER BY requestlist.ETA DESC '
+' LIMIT 1 ',[Now],True);

if not(AQuery.BOF and AQuery.EOF) then

begin
Song := TSongInfo.Create();
Song['ID'] := AQuery['ID'];
Song['filename'] := AQuery['filename'];
Song['artist'] := AQuery['artist'];
Song['title'] := AQuery['title'];
Song['duration'] := AQuery['duration'];
Song['requestID'] := AQuery['requestID'];
Queue.Add(Song,ipTop);
Queue.AddFile('D:\Mijn muziek\voorbeeld.mp3',ipTop); //jingle voor de aanvraag, naar eigen voorkeur aanpassen
writeln('Verzoek toegevoegd:');
WriteLn(+AQuery['artist']+' - '+AQuery['title']);
Tekst := +AQuery['artist']+' - '+AQuery['title'];
AddBannerLine(Tekst);
// ExecSQL('UPDATE requestlist SET status=:status WHERE (songID = :songID) AND ((status=''new'') OR (status=''pending'')) ',['pending',song['ID']]);
// Bovenstaande regel zorgt er voor dat je verzoeken opgeschoond worden in de database van SAM (is met de onderste 2 regels niet nodig
end

else
WriteLn('Geen verzoek gevonden');
AQuery.Free;
Song.Free;

PAL.WaitForPlayCount(1);
PAL.WaitForTime('+00:00:30'); // Wachttijd i.v.m. jingles
******************************************************************************************************
Plaats reactie
  • Vergelijkbare Onderwerpen
    Reacties
    Weergaves
    Laatste bericht