HamburgJoe
Anmeldungsdatum: 7. Oktober 2017
Beiträge: 37
|
Moin Moin, ich habe eine m3u Liste und möchte diese gern sortieren. Allerdings gehören immer zwei Zeilen Zusammen. Könntet Ihr mir dabei bitte helfen? So sieht die Liste aus: | #EXTINF:-1 tvg-id="Sender 2" tvg-name="Sender 2" tvg-logo="http://000.000.000.000/irgendwas.png" group-title="Sender",Sender 2
http://irgendwas2.com
#EXTINF:-1 tvg-id="Sender 3" tvg-name="Sender 3" tvg-logo="http://000.000.000.000/irgendwas.png" group-title="Sender",Sender 3
http://irgendwas3.com
#EXTINF:-1 tvg-id="Sender 1" tvg-name="Sender 1" tvg-logo="http://000.000.000.000/irgendwas.png" group-title="Sender",Sender 1
http://irgendwas1.com
|
Und so soll es dann aussehen: | #EXTINF:-1 tvg-id="Sender 1" tvg-name="Sender 1" tvg-logo="http://000.000.000.000/irgendwas.png" group-title="Sender",Sender 1
http://irgendwas1.com
#EXTINF:-1 tvg-id="Sender 2" tvg-name="Sender 2" tvg-logo="http://000.000.000.000/irgendwas.png" group-title="Sender",Sender 2
http://irgendwas2.com
#EXTINF:-1 tvg-id="Sender 3" tvg-name="Sender 3" tvg-logo="http://000.000.000.000/irgendwas.png" group-title="Sender",Sender 3
http://irgendwas3.com
|
Vielen Dank im Voraus für Eure Hilfe! =)
|
Doc_Symbiosis
Anmeldungsdatum: 11. Oktober 2006
Beiträge: 4453
Wohnort: Göttingen
|
Was soll die Sortierung vorgeben? Die URL? Oder die EXTINFO?
|
HamburgJoe
(Themenstarter)
Anmeldungsdatum: 7. Oktober 2017
Beiträge: 37
|
Doc_Symbiosis schrieb: Was soll die Sortierung vorgeben? Die URL? Oder die EXTINFO?
Die EXTINFO, sorry, die Info habe ich offensichtlich vergessen. Ganz genau genommen geht es um tvg-name="Sender 2"
|
homer65
Anmeldungsdatum: 8. November 2005
Beiträge: 586
Wohnort: bochum, germany
|
Arbeite mich gerade in C++ ein. Glaube, das ich schon in der Lage bin so ein Programm zu schreiben. Wenn du Interesse daran hättest und sich keine einfache anderweitige Lösung findet, würde ich ein entsprechendes Programm erstellen. Hilfreich wären allerdings ein paar Testdaten. Vermutlich handelte es sich nicht nur um die drei angeführten Datensätze.
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 13219
|
War für mich einfacher in Ruby | $ ./x.rb data
#EXTINF:-1 tvg-id="Sender 1" tvg-name="Sender 1" tvg-logo="http://000.000.000.000/irgendwas.png" group-title="Sender",Sender 1
http://irgendwas1.com
#EXTINF:-1 tvg-id="Sender 2" tvg-name="Sender 2" tvg-logo="http://000.000.000.000/irgendwas.png" group-title="Sender",Sender 2
http://irgendwas2.com
#EXTINF:-1 tvg-id="Sender 3" tvg-name="Sender 3" tvg-logo="http://000.000.000.000/irgendwas.png" group-title="Sender",Sender 3
http://irgendwas3.com
|
x.rb 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 | #!/usr/bin/ruby
list = []
item = nil
ARGF.each_line do |line|
case line
when /^#/
list << item if item
item = line
else
item << line
end
end
list << item if item
list.sort_by! {|x| x[/tvg-name="([^"]*)"/, 1]}
puts list
|
|
homer65
Anmeldungsdatum: 8. November 2005
Beiträge: 586
Wohnort: bochum, germany
|
@rklm
Schick, einfach und schnell. Da kann ich natürlich nicht mithalten. ☺
|
HamburgJoe
(Themenstarter)
Anmeldungsdatum: 7. Oktober 2017
Beiträge: 37
|
rklm schrieb: War für mich einfacher in Ruby | $ ./x.rb data
#EXTINF:-1 tvg-id="Sender 1" tvg-name="Sender 1" tvg-logo="http://000.000.000.000/irgendwas.png" group-title="Sender",Sender 1
http://irgendwas1.com
#EXTINF:-1 tvg-id="Sender 2" tvg-name="Sender 2" tvg-logo="http://000.000.000.000/irgendwas.png" group-title="Sender",Sender 2
http://irgendwas2.com
#EXTINF:-1 tvg-id="Sender 3" tvg-name="Sender 3" tvg-logo="http://000.000.000.000/irgendwas.png" group-title="Sender",Sender 3
http://irgendwas3.com
|
x.rb 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 | #!/usr/bin/ruby
list = []
item = nil
ARGF.each_line do |line|
case line
when /^#/
list << item if item
item = line
else
item << line
end
end
list << item if item
list.sort_by! {|x| x[/tvg-name="([^"]*)"/, 1]}
puts list
|
Vielen Dank für Deine Hilfe, klappt wunderbar. Allerdings hätte ich die Ausgabe gern in eine neue m3u Datei. Könntest Du mir dazu einen Tip geben?
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11269
Wohnort: München
|
Du kannst die Ausgabe des Skripts in eine Datei umleiten (vgl. Shell/Umleitungen).
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 13219
|
homer65 schrieb: @rklm
Schick, einfach und schnell. Da kann ich natürlich nicht mithalten. ☺
Ja, Ruby ist schon klasse - da macht das Programmieren gleich doppelt Spaß.
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11269
Wohnort: München
|
Man könnte das mit Python3 noch etwas kompakter gestalten (das Skript akzeptiert Eingaben auf stdin oder Dateien als Argumente):
| #!/usr/bin/env python3
import fileinput
lines = [line for line in fileinput.input() if line.strip()] # filter empty and whitespace-only lines
for entry in sorted(((l1, l2) for l1, l2 in zip(lines[::2], lines[1::2])),
key=lambda x: x[0].partition('tvg-name="')[-1].partition('"')[0]):
print(*entry, sep='', end='')
|
|
HamburgJoe
(Themenstarter)
Anmeldungsdatum: 7. Oktober 2017
Beiträge: 37
|
Habe die Ausgabe in eine Datei umgeleitet. Sorry, hatte da zu kompliziert gedacht. Danke für Eure hilfe! =)
|