Array[3] je nachdem leer füllen

  • Hey

    Also folgendes Problem. Ich will aus einem .csv-file rauslesen, ob es in einer festgelegten spalte eine 6-stellige zahl enthält. Das Program sollte per cmd aufgerufen werden...klappt ja schon mal...nun soll im cmd auch noch der pfad die spalte in der gesucht werden soll und je nachdem noch -s (für "silent" angehängt werden können. Pfad und Spalte hab ich soweit drinn und es funktioniert auch...nun habe ich aber das Problem, dass wenn ich den string in ein array "splitte" und danach die einzelnen werte auslese das programm nur funktioniert wenn -s auch im cmd eingegeben wird (oder ein anderer array[3]-wert) es sollte aber so sein, dass auch wenn der wert 3 nicht eingegeben wird etwas läuft. Nähmlich das fast gleiche ausser dass dann noch msgboxen einen fehler ausgeben. Meine idee war nun, array[3] wenn nichts drinn steht einfach mit 0 oder sowas zu füllen damit das ganze läuft. Geht sowas denn überhaupt ?( ?(

    Also das hier ist mein Code bis anhin:

    [autoit]

    #include <array.au3>

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

    AutoItSetOption("TrayIconHide", 1)
    $parameter = StringSplit($CmdLineRaw, " ")
    $file = FileOpen($parameter[1], 0)
    $spalte = $parameter[2]
    $zaehler = 2
    $paragroesse = UBound($parameter)

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

    While True
    $linie = FileReadLine($file, $zaehler)
    $array = StringSplit($linie, ";") ;teilt den String und schreibt ihn in ein Array

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

    If $paragroesse < 3 Then
    If Not StringIsDigit($array[$spalte]) Then ;wenn der String keine Zahl ist
    MsgBox( 16, "Fehler", "Datei ist korrupt!")
    Exit
    EndIf
    If Not StringLen($array[$spalte]) = 6 Then ;wenn der String nicht 6 Zeichen hat
    MsgBox( 16, "Fehler", "Datei ist korrupt!")
    Exit
    EndIf
    Else
    If $parameter[3] = "-s" Then ;wenn das Programm mit -s aufgerufen wurde
    If Not StringIsDigit($array[$spalte]) Then ;wenn der String keine Zahl ist
    ProcessClose("notepad.exe")
    Exit
    EndIf
    If Not StringLen($array[$spalte]) = 6 Then ;wenn der String nicht 6 Zeichen hat
    ProcessClose("notepad.exe")
    Exit
    EndIf
    EndIf
    EndIf
    $zaehler = $zaehler + 1
    WEnd

    [/autoit]

    danke schonmal

    Bild1: Ich beim debuggen

  • Da prüfst du doch schon auf den Parameter.

    [autoit]

    If $parameter[3] = "-s" Then ;wenn das Programm mit -s aufgerufen wurde
    If Not StringIsDigit($array[$spalte]) Then ;wenn der String keine Zahl ist
    ProcessClose("notepad.exe")
    Exit
    EndIf
    If Not StringLen($array[$spalte]) = 6 Then ;wenn der String nicht 6 Zeichen hat
    ProcessClose("notepad.exe")
    Exit
    EndIf
    Else ; wenn etwas anderes als -s dort steht dann
    MsgBox(0, "Fehler", "Fehler")
    EndIf

    [/autoit]

    --EDIT--
    Oder meinst du das wenn mit $cmdlineraw nur 2 parameter übergeben werden, das dann was anderes passieren soll?

  • machst du doch schon ^^

    [autoit]

    If $paragroesse < 3 Then
    If Not StringIsDigit($array[$spalte]) Then ;wenn der String keine Zahl ist
    MsgBox( 16, "Fehler", "Datei ist korrupt!")
    Exit
    EndIf
    If Not StringLen($array[$spalte]) = 6 Then ;wenn der String nicht 6 Zeichen hat
    MsgBox( 16, "Fehler", "Datei ist korrupt!")
    Exit
    EndIf
    Else

    [/autoit]
  • Warum verwendest du CMDLINERAW? $CMDLINE ist in diesem Kontext viel praktischer ;)

    [autoit]

    Global $fSilent = False, $sFile = "", $spalte = 0
    If $CMDLINE[0] > 0 Then $sFile = $CMDLINE[1]
    If $CMDLINE[0] > 1 Then $spalte = Int( $CMDLINE[2])
    If $CMDLINE[0] > 2 Then $fSilent = $CMDLINE[3] = "-s"

    [/autoit]

    PS: cmdlineraw ist beim Ausführen als exe und als au3 unterschiedlich belegt, das Array cmdline nicht.

  • Also hab das ganze nun doch ganz anders gemacht xD...vieleicht wird jemand daraus schlau, braucht ihr aber nicht zu wissen da ihr wohl nie so etwas brauchen werdet. Hab noch ne GUI dazugedichtet was aber nicht nötig gewesen wäre.

    Danke an alle :rock:

    [autoit]

    #include <array.au3>
    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>

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

    AutoItSetOption("TrayIconHide", 1)
    $parameter = StringSplit($CmdLineRaw, " ")
    If $parameter[0] < 2 Then
    $Achtung = GUICreate("Achtung", 304, 105, 274, 187)
    GUISetIcon("C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\SetupCache\Client\Graphics\warn.ico", -1)
    $Label2 = GUICtrlCreateLabel("Erlaubte Parameter: pruefen.exe 'datei' 'spalte' '(-s)'", 48, 16, 248, 17)
    $Ok = GUICtrlCreateButton("Ok", 96, 72, 105, 25)
    $Icon1 = GUICtrlCreateIcon("C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\SetupCache\Client\Graphics\warn.ico", -1, 8, 24, 32, 32)
    $Label3 = GUICtrlCreateLabel("Beispiel: pruefen.exe datei.csv 1 -s", 48, 48, 168, 17)
    GUISetState(@SW_SHOW)
    While 1
    $nMsg = GUIGetMsg()
    If $nMsg = $Ok Then
    Exit
    EndIf
    WEnd
    EndIf
    $file = FileOpen($parameter[1], 0)
    $spalte = $parameter[2]
    $zaehler = 2

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

    While True
    $linie = FileReadLine($file, $zaehler)
    $array = StringSplit($linie, ";") ;teilt den String und schreibt ihn in ein Array
    If $parameter[0] = 2 Then
    If Not StringIsDigit($array[$spalte]) Then ;wenn der String keine Zahl ist
    MsgBox( 16, "Fehler", "Datei ist korrupt!")
    Exit
    EndIf
    If Not StringLen($array[$spalte]) = 6 Then ;wenn der String nicht 6 Zeichen hat
    MsgBox( 16, "Fehler", "Datei ist korrupt!")
    Exit
    EndIf
    EndIf
    If $parameter[0] = 3 Then
    If $parameter[3] = "-s" Then ;wenn das Programm mit -s aufgerufen wurde
    If Not StringIsDigit($array[$spalte]) Then ;wenn der String keine Zahl ist
    ProcessClose("notepad.exe")
    Exit
    EndIf
    If Not StringLen($array[$spalte]) = 6 Then ;wenn der String nicht 6 Zeichen hat
    ProcessClose("notepad.exe")
    Exit
    EndIf
    EndIf
    EndIf
    $zaehler = $zaehler + 1
    WEnd

    [/autoit]

    Bild1: Ich beim debuggen