CronTab

  • Hallo zusammen.

    Ich habe eine Datei, die sieht so aus:
    (Beispieldaten)

    Spoiler anzeigen
    [autoit]


    * * * * * () Allgemeine Information () CronTab wurde gestartet.
    i i i i i reg.log
    i * * * * :kill notepad.exe
    i * * * * :kill C:\Programme\KN364-2014\imd_dat_germa.exe
    i i 08 02 i () Geburtstagskalender () Heute (i i DD MM i) haben folgende User/innen Geburtstag|| || Anja Musterfrau || Manfred Müllermeister
    */5 * * * * () Alle 5 Minuten () Ich erscheine alle 5 Minuten
    0 0 * * 4 () Jeden Donnerstag () genau um 00:00 Uhr.
    0 0 * * 6,7 () Jeden Samstag und Sonntag. Sonntag hat die Nummer [0] und [7]
    0 1-23/2 * * * () alle ungeraden Stunden () Ich erscheine zu jeder ungeraden Stunden.
    0 0-22/2 * * * () alle geraden stunden () Ich erscheine zu jeder geraden Stunden.
    i i i i i "C:\Program Files\butter_oder_fisch\egal.exe"

    [/autoit]

    In Excel das ganze dargestellt sieht so aus:
    autoit.de/wcf/attachment/24234/

    Wichtig ist, die Spalten sind sichtbar zwar durch Leerzeichen dargestell, aber es gibt auch Leerzeichen in der Befehlsspalte(auf dem Excelbild: F).

    Wie bekomme ich nun die Werte nun getrett für ein Array, damit es dann weiter genutzt werden kann ?

    Dateien

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

    Einmal editiert, zuletzt von Alina (13. Februar 2014 um 14:37) aus folgendem Grund: gelöst: Problem gelöst Dank Forumhilfe. ;)

  • Naja was hast du nun als Quelldatei? Steht die Excel Tabelle zur verfügung? Wenn ja siehe Excel UDF. Wenn nur der Export der Tabelle als Textdatei zur Verfügung steht... warum exportierst du die Datei nicht mit brauchbaren Trennzeichen damit stringsplit() ohne weiteres nutzbar wird? Sollte nur der weniger brauchbare Export möglich sein, dann brauchst du eben minimale logik um das wieder auseinander zu fummeln:

    ungetestet und nur fix im browser geschrieben...

    [autoit]


    #include <file.au3>
    #include <array.au3>
    global $aText = _filereadtoarray(...)
    global $a2dResult[ubound($aText)][6] = [["Min","Std","Tag","Monat","Wochentag","Befehl"]]
    for $i = 1 to ubound($atext)-1
    $atemp = stringsplit($aText[$i]," ")
    for $j = 1 to ubound($atemp)-1
    if $j <= 5 then
    $a2dResult[$i][$j-1] = $atemp[$j]
    else
    $a2dResult[$i][5] &= $atemp[$j] & " "
    endif
    next
    $a2dResult[$i][5] = stringtrimright($a2dResult[$i][5],1)
    next
    _arraydisplay($a2dresult)

    [/autoit]
  • Wenn die Tabelle immer die selbe Anzahl an Spalten hat und Spalten nicht leer sein können, sollte das kein Problem darstellen.

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    #include <File.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Global $sPath_File = @ScriptDir & "\Test.txt" ;Pfad zur Datei mit den Tabellendaten.
    Global $hFile = FileOpen($sPath_File)
    Global $aTable[_FileCountLines($sPath_File)][6], $iLine = 0

    [/autoit] [autoit][/autoit] [autoit]

    While True
    $sLine = FileReadLine($hFile)
    If @error Then ExitLoop

    [/autoit] [autoit][/autoit] [autoit]

    $aRow = StringSplit(StringReplace($sLine, " ", @CR, 5), @CR, 2)
    For $i = 0 To 5
    $aTable[$iLine][$i] = $aRow[$i]
    Next

    [/autoit] [autoit][/autoit] [autoit]

    $iLine += 1
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    _ArrayDisplay($aTable)

    [/autoit]
  • Du hast die Tatsache vergessen, dass in der letzten Spalte beliebig viele Leerzeichen erlaubt sind. Dein Script würde also nur den ersten Teil der Befehlsspalte ins Array schreiben...

    Edit: Sorry mein Fehler, du splittest ja nicht alle Leerzeichen, somit sollte dein Script genauso funktionieren...

  • Alina,
    wie bekommst du denn die crontab-Datei ins Excel importiert?
    Ich vermute, dein Beispieltext aus dem Startpost beinhaltet nicht den richtigen Dateiinhalt!

    Poste bitte den String, der vom folgenden Script zurückgegeben wird.

    [autoit]

    FileDelete("test.txt") ;datei löschen
    FileWrite("test.txt", String(StringToBinary(FileRead("crontab.log")))) ;dateiinhalt in hexadezimaldarstellung
    ShellExecute("test.txt") ;hexstring anzeigen

    [/autoit]

    ciao
    Andy


    "Schlechtes Benehmen halten die Leute doch nur deswegen für eine Art Vorrecht, weil keiner ihnen aufs Maul haut." Klaus Kinski
    "Hint: Write comments after each line. So you can (better) see what your program does and what it not does. And we can see what you're thinking what your program does and we can point to the missunderstandings." A-Jay

    Wie man Fragen richtig stellt... Tutorial: Wie man Script-Fehler findet und beseitigt...X-Y-Problem

    2 Mal editiert, zuletzt von Andy (9. Februar 2014 um 09:12)

  • Andy:
    die Datei, die mit dem Script von Dir ist, ist leer.

    Das Beispiel aus Posting-1 ist das richtige.
    Das mit Excel ist abgetippt aus dr Textdatei.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Sry, mein Fehler, ersetze bitte im Script crontab.log durch crontab.txt
    ABTIPPEN eliminiert nämlich so gut wie alle Whitespace, an denen man ggf. splitten könnte.
    Nur einige Zeilen der orginalen LOG-Datei reichen!
    Wenn du diese Daten hier nicht posten willst, schreib mir eine PN.

    Excel erlaubt imho als Spalten-Trenner beim CSV-Import nur ein Zeichen (bzw. Kombination). Von "Nimm die ersten 6 Leerzeichen als Trenner, und dann ist der Rest egal" habe ich bisher (Excel 2007 &2010) nichts gesehen.
    Oder hast du die Daten aus der Textdatei ins Excel eingetippt?

  • Hallo Andy.

    Es ist 11:55 Ortzeit bei uns hier. Mache gerade Pause, weil es paßt und gleich mal nachsehen, ob es hier was neues gibt. ;)

    Erst einmal DANKE !!!


    Folgendes kommt beim Aufruf raus:

    Spoiler anzeigen
    [autoit]


    0x2A202A202A202A202A20282920416C6C67656D65696E6520496E666F726D6174696F6E2028292043726F6E546162207775726465206765737461727465742E0D0A692069206920692069207265672E6C6F67200D0A69202A202A202A202A203A6B696C6C206E6F74657061642E6578650D0A69202A202A202A202A203A6B696C6C20433A5C50726F6772616D6D655C4B4E3336342D323031345C696D645F6461745F6765726D612E6578650D0A69206920303820303220692028292047656275727473746167736B616C656E6465722028292048657574652028692069204444204D4D20692920686162656E20666F6C67656E646520557365722F696E6E656E20476562757274737461677C7C207C7C20416E6A61204D757374657266726175207C7C204D616E66726564204DFC6C6C65726D6569737465720D0A2A2F35202A202A202A202A20282920416C6C652035204D696E7574656E2028292049636820657273636865696E6520616C6C652035204D696E7574656E0D0A302030202A202A2034202829204A6564656E20446F6E6E6572737461672028292067656E617520756D2030303A3030205568722E0D0A302030202A202A20362C37202829204A6564656E2053616D7374616720756E6420536F6E6E7461672E20536F6E6E7461672068617420646965204E756D6D6572205B305D20756E64205B375D0D0A3020312D32332F32202A202A202A20282920616C6C6520756E6765726164656E205374756E64656E2028292049636820657273636865696E65207A75206A6564657220756E6765726164656E205374756E64656E2E0D0A3020302D32322F32202A202A202A20282920616C6C65206765726164656E207374756E64656E2028292049636820657273636865696E65207A75206A65646572206765726164656E205374756E64656E2E0D0A6920692069206920692022433A5C50726F6772616D2046696C65735C6275747465725F6F6465725F66697363685C6567616C2E657865220D0A

    [/autoit]

    Wieso das ganze "Codiert"? Verstehe ich nicht. Habe auch gerade keinen Kopf mehr zum nachdenken. ;)

    Ich tippe das schneller in Excel ab, als das ich so wenig Daten exportiere.
    Eigentlich hat das Ganze gar nichts mit Excel zu tun. Ich habe es nur noch einmal in einem Bild dargestellt, damit es verstanden wird. ;)
    Ich und auf «Deutsch» erklären, ist ja für Euch nicht immer so leicht zu verstehen und für mich auch nicht immer so leicht darzustrellen.
    Ein Bild sagt mehr als 1000 Worte. Vielleicht waren es diesen mal zu viele MEHR. ;)

    Zum Thema: "Nimm die ersten 6 Leerzeichen als Trenner, und ..." Man könnte, so meine ich, wenn man gut ist mit Array (z. B. unser Forum_Array-King), das Ganze so lösen.
    Die Theorie !!!
    1.)
    Jeden Datensatz Trennen durch LEERZEICHEN
    2.)
    die ersten 6. Arrays zu einem zusammen fügen und da die 6 Leerzeichen wieder zufügen.
    Idee: $alle6 = [array][0][1] & " " & [array][0][2] & " " & [array][0][3] & " " & [array][0][4] & " " & [array][0][5] & " " & [array][0]6]
    Nur was mit dem Rest an Array, wo man ja nicht sagen kann, wie viel Leerzeichen im Befehl ist.

    Brauche doch nichts "Geheim" halten. Sind doch eh Beispieldaten. Habe ich mir angewöhnt, weil von wegen ab und an mal das Thema "Datenschutz" / "Schweigeplficht" auch wichtig sein sollten. ;)

    So, dann mal wieder weiter arbeiten muß.

    Seit lieb gegrüßt und Glückwunsch für das "Olympische GOLD". ;)

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Okay, ich glaube, ich habe verstanden was du gemacht hast^^
    Ich bin die ganze Zeit davon ausgegangen, dass du eine von einem anderen Programm erstellte Logdatei aufteilen willst.
    Wenn das so ist, dann brauche ich von dieser erstellten Logdatei ein Muster, denn DORT stehen sicher Trennzeichen drin, die man benutzen kann.
    Wenn nicht, dann kann man den oben genannten Ansatz von name22 aus Post #3 verfolgen, die Logdatei zeilenweise einzulesen und an den ersten 6 Leerzeichen zu splitten. Die Lösung hättest du dann schon, oder funktioniert das Script nicht?

  • name22 & Andy.

    Danke für Eure Hilfe !!!

    Post #3 hat mir weiter geholfen.

    @Allgemein:
    Ich habe ein CronTab für Windows, heißt, ich habe eine Datei, die beim starten des PC's startet und
    dann je nach Zeit ein Programm aufruft / durchführt und das solange der PC an ist.

    Zwei Sachen die ich noch mit einpflegen möchte ist, das sich crontab.exe automatisch um 00:00 Uhr
    startet und dann halt eine grafische Oberfläche um die CronTabs zu verwalten.
    Ich weiß, das man vieles auch mit Windowsmitteln machen kann, aber so kann man neue Cron's auch
    schnell mal durch ein anderes Script eintragen und und und.

    CronTab kenne ich eigentlich von der damaligen MCP-Windowsschulung (Linux waren 24 Std. und das beinhaltete nicht
    nur Man-Page, sondern auch CronTab). Es war meine erste Schulung damals und noch privat auf eigene Kosten.
    Hat viel Spaß gemacht, das alles zu lernen.

    Sorry das ich erst jetzt antworte, aber erstens ist hier beruflich und wettermäßig die Hölle an kochen
    und zweitens die liebe Internetverbindung die ich ja zur Fernnutzung meines PC'S benötige. Sie woltle
    irgendwie nicht so recht.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

    Einmal editiert, zuletzt von Alina (13. Februar 2014 um 14:37)