PERL @Array richtig "füttern"??

  • Hi zusammen,


    ich habe ein Problem ich schreibe Daten der timers.conf in ein Array
    Hier der Code:


    Allerdings ist ab dem zweiten Push immer dieses "Leerzeichen" in der Zeile.
    Wie bekomme ich das weg oder noch besser was muss ich machen damit es erst garnicht auftritt?


    Hier die Ausgabe von @viva:

    Code
    1. Durchlauf:
    0 S19.2E-1-1108-12120 29 1000 1100 99 99 VIVA PLUS
     0 S19.2E-1-1108-12120 28 1100 1200 99 99 VIVA PLUS
    2. Durchlauf:
     0 S19.2E-1-1108-12120 29 1000 1100 99 99 VIVA PLUS
     0 S19.2E-1-1108-12120 28 1100 1200 99 99 VIVA PLUS


    Achso wenn ich schon dabei bin zu fragen:
    Kann ich das Array so sortieren das immer der nächste Timer oben steht? Sprich:
    0 S19.2E-1-1108-12120 29 1000 1100 99 99 VIVA PLUS
    mit
    0 S19.2E-1-1108-12120 28 1100 1200 99 99 VIVA PLUS
    tauschen?


    Achso wer net weiss was was ist:
    [An/Aus][channel][Tag][Start][Ende][Prio][Lebensdauer][Name]
    [0] [S19.2E-1-1108-12120] [28] [1100] [1200] [99] [99] [VIVA PLUS]


    Also zum checken wäre Tag und Start und die Zeile als erste einfügen welche als nächsts drann wäre.


    Hoffe ich habe mich verständlich ausgedrückt und jemand kann mir helfen.


    Vielen Dank


    Christian

    Sys:
    TT-FF-S 1.5(4MB-Mod) incl. CI,Nova S-Plus , Asus P4-R800-V Deluxe
    Soft:
    EasyVDR 0.4


  • Liegt an der Art wie Du das Array ausgibst, versuch mal die print-Zeile durch


    foreach (@viva) {
    print $_ ;
    }


    zu ersetzen. BTW: Ein bischen kompliziert:


    H: MSI 651p, Celeron 2.4GHz, 512MB, 300GB, DVD, DXR3, TT Budget, CinergyT2, gLCD 128x64, PSOne
    S: SuSE 9.1 Kernel 2.6.21.5 vdr-1.4.6.1 - jumpplay-0.9-1.4.0
    P: cdda-0.1.0 dvd-0.3.6_b03 dxr3-0.2.7 epgsearch-0.9.22 femon-1.1.2 graphlcd-0.1.5 graphtft-0.0.15 mp3/mplayer-0.10.0 osdteletext-0.5.1 radio-0.2.0 streamdev-server-0.3.3-pre3-geni text2skin-1.1-cvs_ext-0.10 vcd-0.7
    A: lirc-0.8.1 noad-0.6.0 nvram-wakeup-0.97 vdradmin-am-3.5.2 vdrsync-0.1.3PRE1 VDRsyncGUI-041222

    Einmal editiert, zuletzt von x-stefan ()

  • Hi x-stefan!


    Erstmal Vielen Dank stefan! Auch für die hilfe gestern im chat.
    Habs geschafft! :D (wenn Dich noch erinnern kannst)


    Soweit klappt das was Du geschrieben hast nur bekomme ich nicht in deinem Code das split (/:/ ,$_); richtig untergebracht.


    Desweiteren greift aus irgendeinem grund mein nachfolgender Code net mehr.


    er nimmt im Zweiten Durchgang net mehr Feld nummer 3 sondern nummer 2 deswegen haperts wiederum weiter unten im code
    Hier die ausgabe mit deiner geänderten Version (nur der Ausgabe!!)
    Ich dachte immer das diese :Argument "S19.2E-1-1108-12120" isn't numeric in numeric eq (==) at mc2mp3.pl line 145. Fehlermeldung aufgrund eines "Leerzeichens" war. Aber wenns an meiner Ausgabe lag. Wo liegt denn dann der Fehler das beim ersten Durchgang alles klappt beim 2ten es um ein Feld nach vorn versetzt ist?


    Code
    Durchgang 1:
    0S19.2E-1-1108-1212029100011009999VIVA PLUS
    0S19.2E-1-1108-1212028110012009999VIVA PLUS
    Jetzt: Tag:27 20:07 -->nächste Aufzeichnung: Tag:29 10:00
    Durchgang2:
    0S19.2E-1-1108-1212029100011009999VIVA PLUS
    0S19.2E-1-1108-1212028110012009999VIVA PLUS
    Argument "S19.2E-1-1108-12120" isn't numeric in numeric eq (==) at mc2mp3.pl line 145.
    Jetzt: Tag:27 19:37 -->nächste Aufzeichnung: Tag:S19.2E-1-1108-12120 :


    Vielen Dank


    Christian

    Sys:
    TT-FF-S 1.5(4MB-Mod) incl. CI,Nova S-Plus , Asus P4-R800-V Deluxe
    Soft:
    EasyVDR 0.4

  • Zitat

    Original von Yazariel
    Erstmal Vielen Dank stefan! Auch für die hilfe gestern im chat.
    Habs geschafft! :D (wenn Dich noch erinnern kannst)


    Yeep, kann ich - ich hoffe ich habe Dich nicht zu sehr verwirrt. War mir am Ende nicht mehr sicher, ob ich Dich nicht voellig falsch verstanden hatte.


    Zitat


    Soweit klappt das was Du geschrieben hast nur bekomme ich nicht in deinem Code das split (/:/ ,$_); richtig untergebracht.


    Desweiteren greift aus irgendeinem grund mein nachfolgender Code net mehr.


    @viva enthaelt bei meinem Code die komplette Zeile aus timers.conf. D.h. Du musst $_ innerhalb der foreach-Schleife splitten. Etwa so:


    Code
    $nr=0 ;
    foreach my $viva (@viva) {
      split (/:/,$viva) ;
      ...


    Zitat


    er nimmt im Zweiten Durchgang net mehr Feld nummer 3 sondern nummer 2 deswegen haperts wiederum weiter unten im code
    Hier die ausgabe mit deiner geänderten Version (nur der Ausgabe!!)
    Ich dachte immer das diese :Argument "S19.2E-1-1108-12120" isn't numeric in numeric eq (==) at mc2mp3.pl line 145. Fehlermeldung aufgrund eines "Leerzeichens" war. Aber wenns an meiner Ausgabe lag. Wo liegt denn dann der Fehler das beim ersten Durchgang alles klappt beim 2ten es um ein Feld nach vorn versetzt ist?


    Code
    Durchgang 1:
    0S19.2E-1-1108-1212029100011009999VIVA PLUS
    0S19.2E-1-1108-1212028110012009999VIVA PLUS
    Jetzt: Tag:27 20:07 -->nächste Aufzeichnung: Tag:29 10:00
    Durchgang2:
    0S19.2E-1-1108-1212029100011009999VIVA PLUS
    0S19.2E-1-1108-1212028110012009999VIVA PLUS
    Argument "S19.2E-1-1108-12120" isn't numeric in numeric eq (==) at mc2mp3.pl line 145.
    Jetzt: Tag:27 19:37 -->nächste Aufzeichnung: Tag:S19.2E-1-1108-12120 :


    Kann ich jetzt nicht ganz nachvollziehen, bei meinen Versuchen hier habe ich den Fehler nicht bekommen.

    H: MSI 651p, Celeron 2.4GHz, 512MB, 300GB, DVD, DXR3, TT Budget, CinergyT2, gLCD 128x64, PSOne
    S: SuSE 9.1 Kernel 2.6.21.5 vdr-1.4.6.1 - jumpplay-0.9-1.4.0
    P: cdda-0.1.0 dvd-0.3.6_b03 dxr3-0.2.7 epgsearch-0.9.22 femon-1.1.2 graphlcd-0.1.5 graphtft-0.0.15 mp3/mplayer-0.10.0 osdteletext-0.5.1 radio-0.2.0 streamdev-server-0.3.3-pre3-geni text2skin-1.1-cvs_ext-0.10 vcd-0.7
    A: lirc-0.8.1 noad-0.6.0 nvram-wakeup-0.97 vdradmin-am-3.5.2 vdrsync-0.1.3PRE1 VDRsyncGUI-041222

    Einmal editiert, zuletzt von x-stefan ()

  • Hi Yazariel,


    na, das ist aber mal ein widerliches Stück Code :)
    ...sorry, ist mir so rausgerutscht. Wie wärs denn damit:


    Code
    my $viva = "S19.2E-1-1108-12120"; # Programm (Viva2)
    my @viva = ( );
    foreach my $timer (@Timers ) {
      my @split = split( /:/, $timer, 8 );
      push( @viva, join( ' ', @split ) ) if ( $split[1] eq $viva );
    }


    Damit bleiben dann wenigstens auch Doppelpunkte im
    Filmtitel erhalten. Warum willst Du die Doppelpunkte
    eigentlich entfernen?


    Zitat


    Achso wenn ich schon dabei bin zu fragen:
    Kann ich das Array so sortieren das immer der nächste Timer oben steht?


    Kommt drauf an, was Du mit dem viva Array denn nun vorhast.
    Wenn Du auf die einzelnen Elemente des Timer Eintrags zugreifen
    willst, könntest Du ja in @viva statt dem Originaleintrag jeweils das
    ganze Array für jede Zeile speichern, der Art:


    push( @viva, \@split ) ...


    Dann kannst Du ganz leicht nach dem dritten und vierten Element
    sortieren, also etwa so:


    @viva = sort { "$a->[2]$a->[3]" cmp "$b->[2]$b->[3]" } @viva


    Gruß,
    Martin

  • Hi SmartFish!


    stefan
    Danke werde ich versuchen


    SmartFish
    Ich weiss das es für einen Fortgeschrittenen wahrscheinlich scheisse ausschaut, aber ich lerne Perl erst gerade nach dem Try&Error verfahren und das gerade mal 4 Wochen in der Freizeit.


    Ich hänge mal die komplette Datei an dann siehste den ganzen Bockmist den ich gemacht habe.(das .txt löschen)
    Aber da es schon in kleinen Ansätzen funktioniert versuche ich halt imme was besser zu werden.


    Tipps sind also gerne willkommen.


    Das ganze ist Teil eines Projektes mc2mp3 welches aus MusikClips mp3 erstellen soll.
    Mit Hilfe der vtx Daten von Viva2 (allerdings scheinen andere Sender auch Daten zu übermitteln somit könnte das mit mehr Sendern als nur Viva2 gehen. Aber wir konzentrieren uns vorerst darauf.)


    Zum Timer:
    Ich zerlege den Timer halt so das ich daraus:
    a) Die Startzeit und Endzeit weiterverarbeiten kann
    b) Daraus ergibt sich der Pfad der Aufnahme um einen Automodus hinzubekommen.


    Soviel jetzt am Morgen muß jetzt zum Kunden fahren.


    Mfg


    Christian

  • Zitat

    Original von Yazariel
    SmartFish
    Ich weiss das es für einen Fortgeschrittenen wahrscheinlich scheisse ausschaut, aber ich lerne Perl erst gerade nach dem Try&Error verfahren und das gerade mal 4 Wochen in der Freizeit.


    SmartFish hat ausgesprochen, was ich Dir so direkt nicht sagen wollte.


    Ich wuerde Dir aus dem O'Reilly Verlag "Einführung in Perl", "Programmieren mit Perl" oder "Perl - kurz & gut" empfehlen, je nachdem was Du schon an Programmiererfahrung hast. Auch empfehlenswert, aber erst mit ein wenig Erfahrung ist das "Perl Kochbuch".

    H: MSI 651p, Celeron 2.4GHz, 512MB, 300GB, DVD, DXR3, TT Budget, CinergyT2, gLCD 128x64, PSOne
    S: SuSE 9.1 Kernel 2.6.21.5 vdr-1.4.6.1 - jumpplay-0.9-1.4.0
    P: cdda-0.1.0 dvd-0.3.6_b03 dxr3-0.2.7 epgsearch-0.9.22 femon-1.1.2 graphlcd-0.1.5 graphtft-0.0.15 mp3/mplayer-0.10.0 osdteletext-0.5.1 radio-0.2.0 streamdev-server-0.3.3-pre3-geni text2skin-1.1-cvs_ext-0.10 vcd-0.7
    A: lirc-0.8.1 noad-0.6.0 nvram-wakeup-0.97 vdradmin-am-3.5.2 vdrsync-0.1.3PRE1 VDRsyncGUI-041222

  • Hi Yazariel,


    Zitat


    Ich weiss das es für einen Fortgeschrittenen wahrscheinlich scheisse ausschaut, aber ich lerne Perl erst gerade nach dem Try&Error verfahren und das gerade mal 4 Wochen in der Freizeit.


    War auch nicht böse gemeint. Wenn ich nach Hause komme, werd ich mir den Code mal anschauen.
    Du hast da einige Kleinigkeiten drin, die so nicht funktionieren können (Länge des Timers berechnen
    usw.).


    Bis heut Abend,
    Martin

  • Hi ihr zwei!


    Ich weiss das es nicht böse gemeint ist.
    Ich wills nur erwähnt haben damit nicht nachher :deppenalarm kommt.


    Mit den Büchern vielen Dank für die Tips. Aber da ich dann zweigleisig fahren (lern grad C++ für Windoof) würde muss das hinten anstehen.


    Aber da ich den VDR so super finde habe ich lange überlegt wie ich mich dafür revanchieren kann, habe ich dieses Projekt ins leben gerufen.
    Achso hier noch ein Link zum mittlerweile etwas veraltetem Code http://mc2mp3.vdr-developer.org


    Ich weiss das es dirty geschrieben ist und ein teil geht noch nicht aber das kommt sicher noch. Und da ich auch noch zusätzlich damit viel neu lerne dauerts länger aber solang irgendwan 2555 :D mal was rauskommt.


    Aber es reicht schon wenn Ihr mir bei meinen Fragen weiterhelft den rest bekomme ich auch noch hin.
    Ich erinner mich nur daran wielange ich an regulären Ausdrücken gesessen habe bis das rauskam was ich wollte.



    So Long und Vielen Dank


    Christian

    Sys:
    TT-FF-S 1.5(4MB-Mod) incl. CI,Nova S-Plus , Asus P4-R800-V Deluxe
    Soft:
    EasyVDR 0.4

  • Hi Yazariel,


    ich habe hier mal eine etwas "umgebaute" Version Deines Codes angehängt.
    Versprochen ist versprochen :) Aber sei nicht böse, wenn es nur ein wenig nach Deinem alten Code aussieht.
    Vor allem habe ich die ganze Sache mal in viele einzelne Funktionen gepackt, damit man wenigstens weiss, was
    da so alles passiert. Aber erwarte keine Wunder: ich hab weder eine timers.conf griffbereit, noch wirklich Ahnung,
    was Dein Code letztendlich für Aufrufe machen soll. Ich hab nur geraten, was Du meinst und dann programmiert,
    wie man's machen könnte. Also eine super Empfehlung, oder? ;)


    Wie dem auch sei: das ist nur als Beispiel mit viel Kommentar gedacht und nicht dazu zu funktionieren. Aber
    vielleicht kommst Du mit meinem Code ja ein Stück weiter und ein bisschen Inspiration ist ja auch
    nicht schlecht.


    Gruß,
    Martin

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!