letzte leere Zeile löschen

  • Hi,

    ich erstelle mir eine Liste der auf dem Server verfügbaren Drucker und speichere sie in einer .txt ab:

    Spoiler anzeigen
    [autoit]


    ...
    $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
    $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_Printer", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly)

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

    If IsObj($colItems) then
    For $objItem In $colItems
    $Output = $Output & $objItem.Name & @CRLF
    Next
    FileWrite(@TempDir & "\Win32_Printer.TXT", $Output )
    Else
    Msgbox(0,"WMI Output","No WMI Objects Found for class: " & "Win32_Printer" )
    Endif

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

    Jetzt ist jedesmal wenn die Datei erstellt wird, die letzte Zeile leer (ein @CRLF ?). Sieht man erst, wenn man die Datei mit nem Editor öffnet.
    Wie kann ich das umgehen, bzw. die letzte Zeile entfernen.

    Wenn ich mir die einzelnen Drucker in der For .. IN - Schleife in ein Array schreibe und dann das Array mittels _FileWriteFromArray ist auch wieder diese letzte leere Zeile vorhanden.
    Ebenso, wenn ich mittels _FileWriteToLine($sfile, _FileCountLines($sFile), "",1) die letzte Zeile "leere/überschreibe" ist sie vorhanden.
    Auch wenn ich per FileOpen mit Param = 2 die Datei erstelle (wird durch die 2 ja neu erstellt/gelöscht) ist diese "göttliche Geisterzeile" da.

    Da wird der Hund in der Pfanne verrückt, oder war ich das ?!?

    Einmal editiert, zuletzt von Torni (17. Juli 2012 um 19:08)

  • Das ist so gewollt. Schreib dir die Funktion doch einfach um:

    Spoiler anzeigen
    [autoit]

    Func _FileWriteFromArray2($File, $a_Array, $i_Base = 0, $i_UBound = 0, $s_Delim = "|")
    ; Check if we have a valid array as input
    If Not IsArray($a_Array) Then Return SetError(2, 0, 0)
    Local $iDims = UBound($a_Array, 0)
    If $iDims > 2 Then Return SetError(4, 0, 0)

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

    ; determine last entry
    Local $last = UBound($a_Array) - 1
    If $i_UBound < 1 Or $i_UBound > $last Then $i_UBound = $last
    If $i_Base < 0 Or $i_Base > $last Then $i_Base = 0

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

    ; Open output file for overwrite by default, or use input file handle if passed
    Local $hFile
    If IsString($File) Then
    $hFile = FileOpen($File, $FO_OVERWRITE)
    Else
    $hFile = $File
    EndIf
    If $hFile = -1 Then Return SetError(1, 0, 0)

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

    ; Write array data to file
    Local $ErrorSav = 0
    Switch $iDims
    Case 1
    For $x = $i_Base To $i_UBound
    If FileWrite($hFile, $a_Array[$x]) = 0 Then
    $ErrorSav = 3
    ExitLoop
    EndIf
    Next
    Case 2
    Local $s_Temp
    For $x = $i_Base To $i_UBound
    $s_Temp = $a_Array[$x][0]
    For $y = 1 To $iDims
    $s_Temp &= $s_Delim & $a_Array[$x][$y]
    Next
    If FileWrite($hFile, $s_Temp) = 0 Then
    $ErrorSav = 3
    ExitLoop
    EndIf
    Next
    EndSwitch

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

    ; Close file only if specified by a string path
    If IsString($File) Then FileClose($hFile)

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

    ; Return results
    If $ErrorSav Then Return SetError($ErrorSav, 0, 0)
    Return 1
    EndFunc ;==>_FileWriteFromArray

    [/autoit]
  • Das mit dem Array war ja nur eine Testlösung von ihm - brauchte er ja eigentlich gar nicht.
    Ihm reicht ja ein einfaches FileWrite so dass er sein oben gepostetes Skript beibehalten kann.