Autor Téma: Doplneni textu mezi text stazeny z internetu v RichEditu  (Přečteno 4405 krát)

Offline Kony

  • Hrdina
  • ****
  • Příspěvků: 376
  • Karma: 1
    • Verze Delphi: Delphi 7
Ahoj,
stahnu si z internetu (z meho serveru) soubor m3u do RichEditu a potreboval bych si za http:// vlozit muj definovany text a potom aby to pokracovalo dal

nyni text vypada takto:
Kód: Delphi [Vybrat]
  1. #EXTM3U
  2. #EXTINF:-1,Radio 1
  3. http://mujserver.cz/cislo_radia/10
  4. #EXTINF:-1,Radio 2
  5. http://mujserver.cz/cislo_radia/20
  6.  

a potreboval bych aby se ten text upravil na
Kód: Delphi [Vybrat]
  1. #EXTM3U
  2. #EXTINF:-1,Radio 1
  3. http://MUJDOPLNENYTEXT@mujserver.cz/cislo_radia/10
  4. #EXTINF:-1,Radio 2
  5. http://MUJDOPLNENYTEXT@mujserver.cz/cislo_radia/20
  6.  

99871

  • Host
Re:Doplneni textu mezi text stazeny z internetu v RichEditu
« Odpověď #1 kdy: 19-05-2018, 16:37:18 »
Proc neupravis playlist rovnou na Tvem serveru? Moznosti samozrejme jsou... Pro Delphi 7 upgrade Indy a pouziti TIdURI, pripadne WinAPI InternetCrackUrl s naslednou modifikaci struktury komponent a vytvorenim nove URL pomoci InternetCreateUrl. Nebo po vidlacku povazovat URL za bezny retezec a pomoci Pos a dalsich textovych funkci do nej vlozit login s heslem (coz bych tipoval ze je cilem).
« Poslední změna: 19-05-2018, 16:45:14 od 99871 »

Offline Kony

  • Hrdina
  • ****
  • Příspěvků: 376
  • Karma: 1
    • Verze Delphi: Delphi 7
Re:Doplneni textu mezi text stazeny z internetu v RichEditu
« Odpověď #2 kdy: 19-05-2018, 17:11:04 »
ano presne to je cilem.... rekl bych ze pouziti POS bude to prave....


na sevreru to nechci primo upravovat.... proto si delam tu aplikaci, abych si to mohl upravovat az u me na PC...

PS: Tak hledam nejaky nakopnuti na to POS, ale nejak v tom tapu

PS 2 : Divam se i na to InternetCrackUrl, ale to bych urcil jen jeden radek, jak docilim abych to takto provedl na vsechny radky a mohl do kazdyho radku dosadit svuj text ???

Mohl by si mi prosim pomoct ?? uz si mi mnohokrat pomohl a jsem ti za to vdecen
« Poslední změna: 19-05-2018, 17:40:16 od Kony »

99873

  • Host
Re:Doplneni textu mezi text stazeny z internetu v RichEditu
« Odpověď #3 kdy: 19-05-2018, 17:51:03 »
ano presne to je cilem.... rekl bych ze pouziti POS bude to prave....

Neni to to prave. Spravne by bylo mit nejaky M3U parser, spolu s URL parsery ktere jsem zminil, ale volba je na Tobe ;) Tady je ukazka s vyuzitim funkci Pos a Insert. Funkcni je, ale urcite neni mnou doporucene!:

Kód: Delphi [Vybrat]
  1. const
  2.   Protocol = 'http://';
  3.  
  4. function IsURL(const Text: string): Boolean;
  5. begin
  6.   Result := Pos(Protocol, Text) = 1; // pokud je na zacatku textu retezec "http://", povazujeme text za URL (coz zdaleka neni pravda)
  7. end;
  8.  
  9. function TryAppendLogin(var URL: string; const UserName, Password: string): Boolean;
  10. begin
  11.   Result := IsURL(URL); // zjistime zda je retezec URL
  12.   if Result then // pokud ano, pak...
  13.     Insert(UserName + ':' + Password + '@', URL, Length(Protocol) + 1); // vlozime jmeno a heslo na pozici za protokol
  14. end;
  15.  
  16. procedure TForm93.Button1Click(Sender: TObject);
  17. var
  18.   S: string;
  19.   I: Integer;
  20. begin
  21.   RichEdit1.Lines.BeginUpdate;
  22.   try
  23.     for I := 0 to RichEdit1.Lines.Count - 1 do
  24.     begin
  25.       S := RichEdit1.Lines[I];
  26.       if TryAppendLogin(S, 'login', 'password') then
  27.         RichEdit1.Lines[I] := S;
  28.     end;
  29.   finally
  30.     RichEdit1.Lines.EndUpdate;
  31.   end;
  32. end;

Netestoval jsem v Delphi 7, jen doufam ze by melo fungovat i tam. Spravna cesta by byla pouziti TIdURI (jenz ma platformne nezavisly parser), pripadne pro Windows WinAPI ktere jsem zminoval.

Docileni toho aby radky obsahujici URL zdroje M3U playlistu by vyzadovaly M3U parser. Vyse uvedene reseni nahradi vsechny radky zacinajici protokolem http:// (coz neni uplne v poradku). Prvne bych se pokusil napsat si vlasntni M3U parser. Ten format je trivialni.
« Poslední změna: 19-05-2018, 18:01:42 od 99873 »

Offline Kony

  • Hrdina
  • ****
  • Příspěvků: 376
  • Karma: 1
    • Verze Delphi: Delphi 7
Re:Doplneni textu mezi text stazeny z internetu v RichEditu
« Odpověď #4 kdy: 19-05-2018, 17:58:25 »
AUUUUUU tak to je narez.... jsi neskutecnej

vysledek :
Kód: Delphi [Vybrat]
  1. #EXTM3U
  2. #EXTINF:-1,Radio 1
  3. http://login:password@mujserver.cz/cislo_radia/10
  4.  
  5. #EXTINF:-1,Radio 2
  6. http://login:password@mujserver.cz/cislo_radia/20

jen tam rve mezeru za kazdej ten radek. to je spravne ???

PS : a jeste se divam.... funguje to dobre, ale po nekolika radcich to proste prestane doplnovat....
« Poslední změna: 19-05-2018, 18:00:59 od Kony »

99875

  • Host
Re:Doplneni textu mezi text stazeny z internetu v RichEditu
« Odpověď #5 kdy: 19-05-2018, 18:02:48 »
Nemas zapnuty WordWrap v tom rich editu? Jinak obecne, data bys mel uchovavat mimo vizualni komponenty. Cili stahnout ze serveru do instance string list, upravit hodnoty tam, a az po uprave predat vizualni komponente.
« Poslední změna: 19-05-2018, 18:09:47 od 99875 »

Offline Kony

  • Hrdina
  • ****
  • Příspěvků: 376
  • Karma: 1
    • Verze Delphi: Delphi 7
Re:Doplneni textu mezi text stazeny z internetu v RichEditu
« Odpověď #6 kdy: 19-05-2018, 18:11:58 »
WordWrap jsem tedka dal na false a je to to samy...

a jak si to myslel tim upravou jinde ??? nacetl sjem prace ten m3u do toho RichEditu a potom tam upravil, nevim jak jinak na to

PS: Ty mezery by ani nevadily, ale to ze to po nejake dobe prestane dosazovat.... je to ruzny.. jednou po cca 50 radcich po druhy treba po 20ti
« Poslední změna: 19-05-2018, 18:17:13 od Kony »

99877

  • Host
Re:Doplneni textu mezi text stazeny z internetu v RichEditu
« Odpověď #7 kdy: 19-05-2018, 18:18:27 »
WordWrap jsem tedka dal na false a je to to samy...

a jak si to myslel tim upravou jinde ??? nacetl sjem prace ten m3u do toho RichEditu a potom tam upravil, nevim jak jinak na to

No kvuli tomu lamani radku jsem mel na mysli nacist data ze serveru do instance (i docasne) TStringList, ten projit, a az pote ten upraveny string list predat rich edit.

Offline Kony

  • Hrdina
  • ****
  • Příspěvků: 376
  • Karma: 1
    • Verze Delphi: Delphi 7
Re:Doplneni textu mezi text stazeny z internetu v RichEditu
« Odpověď #8 kdy: 19-05-2018, 18:19:59 »
aha, tak to bohuzel nevim jak udelat. vzdycky jsem to delal bud pres memo nebo RichEdit

stahuju ten soubor do promenne pomoci

Kód: Delphi [Vybrat]
  1. DownloadURL_NOCache('http://mujserver/zakladni_radia/zakladni.m3u', zakladni);

a pak vlozim do RichEditu

Kód: Delphi [Vybrat]
  1. RichEdit1.Lines.Add (zakladni);

99879

  • Host
Re:Doplneni textu mezi text stazeny z internetu v RichEditu
« Odpověď #9 kdy: 19-05-2018, 18:25:29 »
Snad neco ve smyslu (zpracovat odpoved serveru predtim nez ji predas vizualni komponente [jez muze ovlivnit iteraci radku jejich zalamovanim]):

Kód: Delphi [Vybrat]
  1. var
  2.   S: string;
  3.   I: Integer;
  4.   Response: TStrings;
  5. begin
  6.   Response := TStringList.Create;
  7.   try
  8.     DownloadURL_NOCache('http://mujserver/zakladni_radia/zakladni.m3u', Response);
  9.     for I := 0 to Response.Count - 1 do
  10.     begin
  11.       S := Response[I];
  12.       if TryAppendLogin(S, 'login', 'password') then
  13.         Response[I] := S;
  14.     end;
  15.     RichEdit1.Lines.Assign(Response);
  16.   finally
  17.     Response.Free;
  18.   end;
  19. end;
« Poslední změna: 19-05-2018, 18:29:15 od 99879 »

Offline Kony

  • Hrdina
  • ****
  • Příspěvků: 376
  • Karma: 1
    • Verze Delphi: Delphi 7
Re:Doplneni textu mezi text stazeny z internetu v RichEditu
« Odpověď #10 kdy: 19-05-2018, 18:34:08 »
Tak to by melo byt ono....

ale jeste jedna vec....

mam na formu CheckBoxy, ktery me urcuji ktery vsechny playlisty se maji stahnout a upravit....
mam :
Kód: Delphi [Vybrat]
  1. if DBCheckBox9.Checked then
  2.     begin
  3.         RichEdit1.Lines.Add (zakladni);
  4.     end;
  5.   if DBCheckBox4.Checked then
  6.     begin
  7.         RichEdit1.Lines.Add (TOP);
  8.     end;

atd......

misto toho dam ten tvuj priklad, ale kdyz vyberu obadva tak se vypise vzdy pouze jeden....


PS2 : tak jak si to tedka upravil tak to uz nejde.... a ja vymazal ten priklad co si mel pred tim......

ted to pise :
a vysi to za zavorkou za response u toho radku jak se stahuje ten m3u response
Kód: Delphi [Vybrat]
  1. [Error] hlavni.pas(199): Types of actual and formal var parameters must be identical
  2. [Error] hlavni.pas(216): Types of actual and formal var parameters must be identical
  3. [Fatal Error] KonaroTV.dpr(5): Could not compile used unit 'hlavni.pas'




PS: Tak uz to bezi jak ma.. jeste jednou mockrat dekuji
« Poslední změna: 19-05-2018, 18:56:19 od Kony »

99881

  • Host
Re:Doplneni textu mezi text stazeny z internetu v RichEditu
« Odpověď #11 kdy: 19-05-2018, 18:58:51 »
Z meho pohledu nemuzu poradit vic. Ano, text v me ukazce nepridava ale nahrazuje diky metode Assign. Pokud bys chtel do rich edit text jen pridavat, pouzij namisto ni metodu AddStrings. Cili radek z me ukazky:

Kód: Delphi [Vybrat]
  1. RichEdit1.Lines.Assign(Response);

bys nahradil za:

Kód: Delphi [Vybrat]
  1. RichEdit1.Lines.AddStrings(Response);

Nevedel jsem o kontextu vyuziti vic nez vis Ty sam :)

Offline Kony

  • Hrdina
  • ****
  • Příspěvků: 376
  • Karma: 1
    • Verze Delphi: Delphi 7
Re:Doplneni textu mezi text stazeny z internetu v RichEditu
« Odpověď #12 kdy: 19-05-2018, 19:04:44 »
diky moc, to jsem presne udelal a uz to slape jak hodinky.....

99883

  • Host
Re:Doplneni textu mezi text stazeny z internetu v RichEditu
« Odpověď #13 kdy: 19-05-2018, 19:10:50 »
diky moc, to jsem presne udelal a uz to slape jak hodinky.....

Neni zac! ;) Nicmene korektni reseni by bylo mit parser pro M3U soubory, ktery by rozlamal jednotlive polozky na nazvy a zdroje a pote bys mohl z takovychto polozek pridat ve zdroji (pokud by byl URL adresou) jmeno uzivatele a heslo. To by vyzadovalo napsat M3U parser a v nem pak pouzit vyse zminene reseni (tj. napr. TIdURI pripadne InternetCrackUrl a InternetCreateUrl na Windows platforme).

Offline Kony

  • Hrdina
  • ****
  • Příspěvků: 376
  • Karma: 1
    • Verze Delphi: Delphi 7
Re:Doplneni textu mezi text stazeny z internetu v RichEditu
« Odpověď #14 kdy: 20-05-2018, 14:47:41 »
jeste se divam, ze to spatne cte diakritiku... v m3u souboru ji mam spravne alůe do RichEditu to nacte spatne

Č to nacte jako ÄŚ

PS:: Ale co me vic zarazi, tak potrebuji cely RichEdit ulozit do souboru

poomoci RichEdit.SavetoFile('test.m3u') mi to pred kazdy radek dopise nejaky nesmysli
« Poslední změna: 20-05-2018, 15:17:42 od Kony »

Offline Kony

  • Hrdina
  • ****
  • Příspěvků: 376
  • Karma: 1
    • Verze Delphi: Delphi 7
Re:Doplneni textu mezi text stazeny z internetu v RichEditu
« Odpověď #15 kdy: 20-05-2018, 15:20:09 »
na zacatek souboru to vlozi :

Kód: Delphi [Vybrat]
  1. {\rtf1\ansi\ansicpg1250\deff0\deflang1029{\fonttbl{\f0\fnil\fcharset238{\*\fname Times New Roman;}Times New Roman CE;}}
  2. \viewkind4\uc1\pard\f0\fs16

a potom pred kazdy zacatek radku

Kód: Delphi [Vybrat]
  1. \par

Ted to mam cely takto :

Kód: Delphi [Vybrat]
  1. procedure TForm1.Button3Click(Sender: TObject);
  2. var
  3.     S: string;
  4.     I: Integer;
  5. begin
  6.   RichEdit1.Clear;
  7.   if DBCheckBox12.Checked then
  8.     begin
  9.       Response := TStringList.Create;
  10.       try
  11.         Response.Text := IdHTTP1.Get('http://server/radio/Zakladni.m3u');
  12.         for I := 0 to Response.Count - 1 do
  13.         begin
  14.           S := Response[I];
  15.           if TryAppendLogin(S, DBEdit7.Text, DBEdit8.Text) then
  16.             Response[I] := S;
  17.         end;
  18.         RichEdit1.Lines.AddStrings(Response);
  19.             finally
  20.         Response.Free;
  21.       end;
  22.     end;
  23.    
  24.   if DBCheckBox8.Checked then
  25.     begin
  26.       Response1 := TStringList.Create;
  27.       try
  28.         Response1.Text := IdHTTP1.Get('http://server/radio/TOP.m3u');
  29.         for I := 0 to Response1.Count - 1 do
  30.         begin
  31.           S := Response1[I];
  32.           if TryAppendLogin(S, DBEdit7.Text, DBEdit8.Text) then
  33.             Response1[I] := S;
  34.         end;
  35.         RichEdit1.Lines.AddStrings(Response1);
  36.             finally
  37.         Response.Free;
  38.       end;
  39.     end;
  40.  
  41.   if DBCheckBox9.Checked then
  42.     begin
  43.       Response := TStringList.Create;
  44.       try
  45.         Response.Text := IdHTTP1.Get('http://http://server/radio/Country.m3u');
  46.         for I := 0 to Response.Count - 1 do
  47.         begin
  48.           S := Response[I];
  49.           if TryAppendLogin(S, DBEdit7.Text, DBEdit8.Text) then
  50.             Response[I] := S;
  51.         end;
  52.         RichEdit1.Lines.AddStrings(Response);
  53.             finally
  54.         Response.Free;
  55.       end;
  56.     end;
  57.  
  58.   if DBCheckBox4.Checked then
  59.     begin
  60.       Response := TStringList.Create;
  61.       try
  62.         Response.Text := IdHTTP1.Get('http://server/radio/folk.m3u');
  63.         for I := 0 to Response.Count - 1 do
  64.         begin
  65.           S := Response[I];
  66.           if TryAppendLogin(S, DBEdit7.Text, DBEdit8.Text) then
  67.             Response[I] := S;
  68.         end;
  69.         RichEdit1.Lines.AddStrings(Response);
  70.             finally
  71.         Response.Free;
  72.       end;
  73.     end;
  74.  
  75.   if DBCheckBox7.Checked then
  76.     begin
  77.       Response := TStringList.Create;
  78.       try
  79.         Response.Text := IdHTTP1.Get('http://server/radio/bit.m3u');
  80.         for I := 0 to Response.Count - 1 do
  81.         begin
  82.           S := Response[I];
  83.           if TryAppendLogin(S, DBEdit7.Text, DBEdit8.Text) then
  84.             Response[I] := S;
  85.         end;
  86.         RichEdit1.Lines.AddStrings(Response);
  87.             finally
  88.         Response.Free;
  89.       end;
  90.     end;
  91.  
  92.   if DBCheckBox5.Checked then
  93.     begin
  94.       Response := TStringList.Create;
  95.       try
  96.         Response.Text := IdHTTP1.Get('http://server/radio/detske.m3u');
  97.         for I := 0 to Response.Count - 1 do
  98.         begin
  99.           S := Response[I];
  100.           if TryAppendLogin(S, DBEdit7.Text, DBEdit8.Text) then
  101.             Response[I] := S;
  102.         end;
  103.         RichEdit1.Lines.AddStrings(Response);
  104.             finally
  105.         Response.Free;
  106.       end;
  107.     end;
  108.  
  109.   if DBCheckBox3.Checked then
  110.     begin
  111.       Response := TStringList.Create;
  112.       try
  113.         Response.Text := IdHTTP1.Get('http://server/radio/vazna.m3u');
  114.         for I := 0 to Response.Count - 1 do
  115.         begin
  116.           S := Response[I];
  117.           if TryAppendLogin(S, DBEdit7.Text, DBEdit8.Text) then
  118.             Response[I] := S;
  119.         end;
  120.         RichEdit1.Lines.AddStrings(Response);
  121.             finally
  122.         Response.Free;
  123.       end;
  124.     end;
  125.  
  126.   if DBCheckBox1.Checked then
  127.     begin
  128.       Response := TStringList.Create;
  129.       try
  130.         Response.Text := IdHTTP1.Get('http://server/radio/moderni.m3u');
  131.         for I := 0 to Response.Count - 1 do
  132.         begin
  133.           S := Response[I];
  134.           if TryAppendLogin(S, DBEdit7.Text, DBEdit8.Text) then
  135.             Response[I] := S;
  136.         end;
  137.         RichEdit1.Lines.AddStrings(Response);
  138.             finally
  139.         Response.Free;
  140.       end;
  141.     end;
  142.  
  143.   if DBCheckBox2.Checked then
  144.     begin
  145.       Response := TStringList.Create;
  146.       try
  147.         Response.Text := IdHTTP1.Get('http://server/radio/hause.m3u');
  148.         for I := 0 to Response.Count - 1 do
  149.         begin
  150.           S := Response[I];
  151.           if TryAppendLogin(S, DBEdit7.Text, DBEdit8.Text) then
  152.             Response[I] := S;
  153.         end;
  154.         RichEdit1.Lines.AddStrings(Response);
  155.             finally
  156.         Response.Free;
  157.       end;
  158.     end;
  159.  
  160.   if DBCheckBox10.Checked then
  161.     begin
  162.       Response := TStringList.Create;
  163.       try
  164.         Response.Text := IdHTTP1.Get('http://server/radio/ostatni.m3u');
  165.         for I := 0 to Response.Count - 1 do
  166.         begin
  167.           S := Response[I];
  168.           if TryAppendLogin(S, DBEdit7.Text, DBEdit8.Text) then
  169.             Response[I] := S;
  170.         end;
  171.         RichEdit1.Lines.AddStrings(Response);
  172.             finally
  173.         Response.Free;
  174.       end;
  175.     end;
  176.    RichEdit1.Lines.SaveToFile('test.m3u');

Kdyz jsem zkusil dat Response.Lines.SaveToFile, tak to ulozilo posledni zvolenou cast.... ale to je jasny, protoze se u kazdyho vyberu Response uvolnuje....
« Poslední změna: 20-05-2018, 15:29:49 od Kony »

Offline Kony

  • Hrdina
  • ****
  • Příspěvků: 376
  • Karma: 1
    • Verze Delphi: Delphi 7
Re:Doplneni textu mezi text stazeny z internetu v RichEditu
« Odpověď #16 kdy: 13-09-2019, 13:53:06 »
Tak jsem znovu koukal na toto vlakno, ale jsou zde jen moje odpovedi... lze nejak zobrazit vse ?

Offline našinec

  • Hrdina
  • ****
  • Příspěvků: 423
  • Karma: 5
Re:Doplneni textu mezi text stazeny z internetu v RichEditu
« Odpověď #17 kdy: 13-09-2019, 15:23:12 »
Ne. Slyšel jsi někdy něco o GDPR?   :P

Offline Kony

  • Hrdina
  • ****
  • Příspěvků: 376
  • Karma: 1
    • Verze Delphi: Delphi 7
Re:Doplneni textu mezi text stazeny z internetu v RichEditu
« Odpověď #18 kdy: 13-09-2019, 21:16:40 »
Tak to pak forum ztraci smysl

Offline raul

  • Hrdina
  • ****
  • Příspěvků: 468
  • Karma: 15
    • Verze Delphi: FPC :D
Re:Doplneni textu mezi text stazeny z internetu v RichEditu
« Odpověď #19 kdy: 13-09-2019, 21:39:35 »
Tak to je solidní nářez... Zrejme delfin rulez ne?
Lazarus 1.6.3:), FPC, Intel/Arm, Windows/Linux, (občas Delphi)

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 7424
  • Karma: 44
    • Verze Delphi: W11 + D11.3.1
Re:Doplneni textu mezi text stazeny z internetu v RichEditu
« Odpověď #20 kdy: 13-09-2019, 22:13:28 »
Kony tu chodí, keď potrebuje poradiť. Nepamätám si jediný prípad, žeby on niekomu poradil. Takzvaná vyžírka. Žiaľ nie je sám.
Win11 64b, Delphi 12.2, FireBird 4.01
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3527
  • Karma: 139
    • Verze Delphi: D2007, XE3, DX10
Re:Doplneni textu mezi text stazeny z internetu v RichEditu
« Odpověď #21 kdy: 14-09-2019, 06:15:50 »
Tak to je solidní nářez... Zrejme delfin rulez ne?
Jj, mam to tu jeste v poste, protoze to ctu pres RSS - ale tam jsou jen prvotni postnute verze a Delfin mival ve zvyku sve odpovedi nasledne rozsirovat.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3527
  • Karma: 139
    • Verze Delphi: D2007, XE3, DX10
Re:Doplneni textu mezi text stazeny z internetu v RichEditu
« Odpověď #22 kdy: 14-09-2019, 06:33:32 »
Tak to pak forum ztraci smysl
Vetsinou, kdyz clovek nekam neco postne, tak nema duvod to mazat. Za to fora nemohou. A proc Delfin chtel, aby se vsechny jeho prispevky smazaly tezko rict...

Offline Kony

  • Hrdina
  • ****
  • Příspěvků: 376
  • Karma: 1
    • Verze Delphi: Delphi 7
Re:Doplneni textu mezi text stazeny z internetu v RichEditu
« Odpověď #23 kdy: 14-09-2019, 10:15:58 »
Kony tu chodí, keď potrebuje poradiť. Nepamätám si jediný prípad, žeby on niekomu poradil. Takzvaná vyžírka. Žiaľ nie je sám.

Ano chodim sem kdyz neco potrebuji poradit, to je pravda, myslel jsem ze od toho fora jsou.
Jsem Delphi samouk.
Samozrejme pokud by se nekdo ptal na neco co vim, tak rad odpovim.