Die Programmiersprache Ruby

Blog|

Forum|

Wiki  


Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]

Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 
Autor Nachricht
BeitragVerfasst: 16 Mär 2016, 12:11 
Offline
Novize
Benutzeravatar

Registriert: 02 Nov 2007, 19:32
Beiträge: 19
Guten Morgen,

ich möchte erweiterte M3U-Dateien (https://de.wikipedia.org/wiki/M3U#Erweiterte_M3U) einlesen, umsortieren und in ein neues File wieder ausgeben.

Einlesen in ein Array und Entfernen des Headers klappt schon:


1
2
3
4
puts File.size?(infile)

a = open(infile) { |f| f.readlines }
a.delete_at(0) # Header l��schen


Der nächste Schritt wäre nun, ein Array aus Hashes (Länge, Titel, Pfad) zu erzeugen.

Allerdings habe ich jetzt die Informationen pro Eintrag immer in zwei aufeinanderfolgenden Array-Elementen.

Gibt es eine elegante Methode, je zwei Elemente zusammenzufassen?

Viele Grüße
Oliver


Nach oben
 Profil  
 
BeitragVerfasst: 16 Mär 2016, 12:57 
Offline
Interpreter

Registriert: 10 Dez 2007, 17:37
Beiträge: 1906
Falls du es selber parsen willst, dann könnte es so in der Art gehen:



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

records = []
record = {}
File.open(infile, "r").each_line do |line|
if line.start_with?('#EXTINF')
# parse line via
# line.split(':')
# line.split(',')
record['title'] = ...
record['length'] = ...
elsif !line.start_with?('#')
record['path'] = line
records << record
record = {}
end
end


Ansonsten würde ich mal ein wenig googlen, es gibt bestimmt schon einige gem's dafür.

_________________
Grüße
Jack


Nach oben
 Profil  
 
BeitragVerfasst: 16 Mär 2016, 14:15 
Offline
Novize
Benutzeravatar

Registriert: 02 Nov 2007, 19:32
Beiträge: 19
Super, danke!

Weil ich das ja als Übung mache, will ich es lieber "zu Fuss" programmieren.


Nach oben
 Profil  
 
BeitragVerfasst: 26 Jan 2017, 00:02 
Offline
Novize

Registriert: 19 Jan 2017, 10:36
Beiträge: 19
ich hab auch noch einen :D
die elegante methode heisst each_slice.



1
2
3
4
5
6
7
8
9
10
def get_m3u_info(m3u)
f = File.open(m3u).readlines("\n")
f.slice!(1...f.length).each_slice(2).map do |record|
match = /^#EXTINF:(\d+),(.*)/.match(record[0])
{:length => match[1].to_i,:name => match[2],:file => record[1].chomp} if match
end
end

songs = get_m3u_info('oink.m3u')
p songs


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
cron