FileRead/FileReadLine

  • Hallo liebe AutoIt-Gemeinde,

    ich benötige ein klein wenig Hilfe für ein Tool was ich mir und meinen Kollegen auf Arbeit geschrieben habe.
    Die Oberfläche dient eigentlich nur dazu bestimmte interne Tickets zu kontrollieren und ggf. updates zu setzen.

    Es funktioniert auch eigtlich alles. Wenn ich ein Ticket anwähle lädt er eine Textdatei (das Ticket) und gibt dieses in einem Edit Feld wieder.

    Und hier genau liegt der Hund begraben. Ich möchte explizit an dieser Stelle, dass er das File erst ab der 5. Zeile komplett ausliest. Die ersten 4 Zeilen soll er hierbei ignorieren. Diese werden vorher seperat ausgelesen und in anderen Feldern ausgegeben.

    Damit man versteht was ich meine hier mein Script zum testen. Wenn man den Filepath anpasst kann man das auf jedem PC testen.

    Sicherlich ist mein gescriptetes Zeugs nicht perfekt, man kann einiges sicherlich besser machen. Aber so läuft es aktuell genau wie gewünscht und ich versteh meinen Code ;)

    Wäre nett wenn man mir hier auf die Sprünge hilft. Ich denke das hier evtl StringReplace zum Einsatz kommen könnte - sicher bin ich mir da auch nicht...

    LG
    Mirko

    Edit:
    Ich habe keine Ahnung warum er den Quellcode hier so unleserlich einfügt :(
    Vor dem absenden sieht noch alles konform aus - erst nach dem Post wird es hier total verzogen :(

    Edit 2:
    Da man den Quellcode ja wirklich nicht entziffern kann hab ich mal die AU3 angehangen... damit sollte es ja jeder sehen können...

    Spoiler anzeigen
    [autoit]


    #region ;**** Directives created by AutoIt3Wrapper_GUI ****#AutoIt3Wrapper_Icon=artifacter.ico#endregion ;**** Directives created by AutoIt3Wrapper_GUI ****#include<GuiTreeView.au3>#include<EditConstants.au3>#include<GUIConstantsEx.au3>#include<TreeViewConstants.au3>#include<WindowsConstants.au3>
    Global $sPath = 'M:\Agents\#CT Profis\Artifacts\'Global $width = 800, $height = 600Global $hGui = GUICreate('Artifacter', $width, $height, -1, 0)
    Dim $input_infos[4]
    GUICtrlSetFont(-1, 9, 600, 0, 'Verdana')Global $bFiles = TrueGUICtrlCreateGroup("Artifacts", 5, 20, 275, 505)GUICtrlSetFont(-1, 8, 600, 0, "Verdana")Global $hTreeView = GUICtrlCreateTreeView(10, 35, $width - 540, $height - 120, BitOR($GUI_SS_DEFAULT_TREEVIEW, $TVS_CHECKBOXES), $WS_EX_STATICEDGE)GUICtrlSetFont(-1, 10, 400, 0, 'Arial')GUICtrlSetBkColor(-1, 0xF8F8F8)$input_createfile = GUICtrlCreateInput("FILENAME", 15, 540, 150, 18)$button_createfile = GUICtrlCreateButton("Create Artifact", 170, 540, 75, 18)GUICtrlCreateGroup("Artifact Infos", 290, 20, 500, 80)GUICtrlSetFont(-1, 8, 600, 0, "Verdana")GUICtrlCreateLabel("Account#:", 300, 40)$input_infos[0] = GUICtrlCreateInput("", 360, 38, 150, 18)GUICtrlCreateLabel("Contact:", 540, 40)$input_infos[1] = GUICtrlCreateInput("", 600, 38, 150, 18)GUICtrlCreateLabel("Company:", 300, 70)$input_infos[2] = GUICtrlCreateInput("", 360, 68, 150, 18)GUICtrlCreateLabel("Phone:", 540, 70)$input_infos[3] = GUICtrlCreateInput("", 600, 68, 150, 18)GUICtrlCreateGroup("Notes", 290, 100, 500, 395)GUICtrlSetFont(-1, 8, 600, 0, "Verdana")$notizen = GUICtrlCreateEdit("", 300, 115, 480, 370, BitOR($WS_VSCROLL, $ES_MULTILINE, $ES_READONLY));~ GUICtrlSetBkColor(-1, 0xF8F8F8)GUICtrlCreateGroup("Updates", 290, 495, 400, 80)GUICtrlSetFont(-1, 8, 600, 0, "Verdana")$input_update = GUICtrlCreateEdit("", 300, 510, 380, 55, BitOR($WS_VSCROLL, $ES_MULTILINE, $ES_AUTOVSCROLL, $ES_WANTRETURN))$button_update = GUICtrlCreateButton("Update Artifact", 700, 530, 75, 20)Global $hStatus1 = GUICtrlCreateLabel('', 0, $height - 16, $width / 2, 16, -1, $WS_EX_STATICEDGE)Global $hStatus2 = GUICtrlCreateLabel('', $width / 2 + 1, $height - 16, $width / 2, 16, -1, $WS_EX_STATICEDGE)
    $winuser = @UserNameIf @UserName = "751076" Then $winuser = "Max Mustermann 1"ElseIf $winuser = "748169" Then $winuser = "Max Mustermann 2"ElseIf $winuser = "828487" Then $winuser = "Max Mustermann 3"ElseIf $winuser = "759732" Then $winuser = "Max Mustermann 4"ElseIf $winuser = "828520" Then $winuser = "Max Mustermann 5"EndIf
    GUISetState()
    _TreeViewUpdate()
    While True Switch GUIGetMsg() Case $GUI_EVENT_PRIMARYDOWN $aInfo = GUIGetCursorInfo($hGui) If $aInfo[4] = $hTreeView Then $oldGUIDataSeparatorChar = Opt('GUIDataSeparatorChar', '\') GUICtrlSetData($hStatus1, ' ' & StringReplace(_GUICtrlTreeView_GetTree($hTreeView), '\\', '\')) $readini = FileRead(StringReplace(_GUICtrlTreeView_GetTree($hTreeView), '\\', '\')) GUICtrlSetData($notizen, $readini) $read_info1 = FileReadLine(StringReplace(_GUICtrlTreeView_GetTree($hTreeView), '\\', '\'), 1) GUICtrlSetData($input_infos[0], $read_info1) $read_info2 = FileReadLine(StringReplace(_GUICtrlTreeView_GetTree($hTreeView), '\\', '\'), 2) GUICtrlSetData($input_infos[1], $read_info2) $read_info3 = FileReadLine(StringReplace(_GUICtrlTreeView_GetTree($hTreeView), '\\', '\'), 3) GUICtrlSetData($input_infos[2], $read_info3) $read_info4 = FileReadLine(StringReplace(_GUICtrlTreeView_GetTree($hTreeView), '\\', '\'), 4) GUICtrlSetData($input_infos[3], $read_info4) Opt('GUIDataSeparatorChar', $oldGUIDataSeparatorChar) If BitAND(_GUICtrlTreeView_HitTest($hTreeView, $aInfo[0] - 11, $aInfo[1] - 41), 64) Then $checked = _GUICtrlTreeView_GetChecked($hTreeView, _GUICtrlTreeView_GetSelection($hTreeView)) _GUICtrlTreeView_SetBold($hTreeView, _GUICtrlTreeView_GetSelection($hTreeView), $checked) $hItem = _GUICtrlTreeView_GetFirstChild($hTreeView, _GUICtrlTreeView_GetSelection($hTreeView)) If $hItem Then _MarkChildItems($hTreeView, $hItem, $checked) EndIf EndIf Case $button_update $oldGUIDataSeparatorChar = Opt('GUIDataSeparatorChar', '\') $read_update = GUICtrlRead($input_update) FileWrite(StringReplace(_GUICtrlTreeView_GetTree($hTreeView), '\\', '\'), @CRLF & @MDAY & "." & @MON & " " & @YEAR & ", " & @HOUR & ":" & @MIN & " by " & $winuser & ":" & @CRLF & $read_update & @CRLF & "--------------------------------------------------------------------------------------------------------------------------------------------------------") $readini = FileRead(StringReplace(_GUICtrlTreeView_GetTree($hTreeView), '\\', '\')) GUICtrlSetData($notizen, $readini) GUICtrlSetData($input_update, "") Case $button_createfile _checkInputs() Case $GUI_EVENT_CLOSE Exit EndSwitchWEnd
    Func _checkInputs() Local $test = 0 For $i = 0 To UBound($input_infos) - 1 If GUICtrlRead($input_infos[$i]) = "" Then $test = 1 ExitLoop EndIf Next If $test = 1 Then MsgBox(0, "Achtung!", 'Bitte alle Felder unter "Artifact Infos" ausfüllen.') Else $oldGUIDataSeparatorChar = Opt('GUIDataSeparatorChar', '\') $read_createfile = GUICtrlRead($input_createfile) $read_input_infos1 = GUICtrlRead($input_infos[0]) $read_input_infos2 = GUICtrlRead($input_infos[1]) $read_input_infos3 = GUICtrlRead($input_infos[2]) $read_input_infos4 = GUICtrlRead($input_infos[3]) FileWrite($sPath & $read_createfile & ".txt", $read_input_infos1 & @CRLF & $read_input_infos2 & @CRLF & $read_input_infos3 & @CRLF & $read_input_infos4 & @CRLF & "Created " & @MDAY & "." & @MON & " " & @YEAR & ", " & @HOUR & ":" & @MIN & " by " & $winuser & @CRLF) _TreeViewUpdate() GUICtrlSetData($input_infos[0], "") GUICtrlSetData($input_infos[1], "") GUICtrlSetData($input_infos[2], "") GUICtrlSetData($input_infos[3], "") MsgBox(0, "", 'Artifact created') EndIf ReturnEndFunc ;==>_checkInputs
    Func _MarkChildItems(ByRef $hTreeView, $hItem, $checked) Do $hNewItem = _GUICtrlTreeView_GetFirstChild($hTreeView, $hItem) If $hNewItem Then _MarkChildItems($hTreeView, $hNewItem, $checked) _GUICtrlTreeView_SetChecked($hTreeView, $hItem, $checked) _GUICtrlTreeView_SetBold($hTreeView, $hItem, $checked) $hItem = _GUICtrlTreeView_GetNextChild($hTreeView, $hItem) Until $hItem = 0EndFunc ;==>_MarkChildItems
    Func _TreeViewUpdate() GUICtrlSetData($hStatus1, ' Bitte warten! Verzeichnis wird eingelesen...') GUICtrlSetData($hStatus2, '') $Timer = TimerInit() Local $aCount = _GUICtrlTreeView_CreateDirectory($hTreeView, $sPath, $bFiles) If Not @error Then $msg = ' Benötigte Zeit: ' & Round(TimerDiff($Timer) / 1000, 3) & ' sek.' $msg &= ' | ' & $aCount[1] & ' Datei(en) und ' & $aCount[0] & ' Verzeichniss(e)' GUICtrlSetData($hStatus1, ' Fertig.') GUICtrlSetData($hStatus2, $msg) EndIfEndFunc ;==>_TreeViewUpdate

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

    ;===============================================================================; Function Name: _GUICtrlTreeView_CreateDirectory($hTreeView, $sPath, $bFiles); Description:: erstellt ein TreeView mit Verzeichnissen (+Dateien); Parameter(s): $hTreeView = ControlID/Handle des TreeViews; $sPath = Verzeichnispfad, der dargestellt werden soll; $bFiles = True = auch Dateien anzeigen, False = nur Verzeichnisse; Requirement(s): #include<GuiTreeView.au3>; Return Value(s): Array mit Anzahl der Verzeichnisse=[0] und Dateien=[1]; 0 und @error = 1, wenn der Pfad nicht existiert bzw. kein Verzeichnis ist; 0 und @error = 2, wenn das FileSystemObject nicht erstellt werden konnte; Author(s): Oscar (http://www.autoit.de);===============================================================================Func _GUICtrlTreeView_CreateDirectory($hTreeView, $sPath, $bFiles = False) Local $hFileItem, $FolderColor = 0x0000FF, $Folder, $aCount[2] = [0, 0] If Not StringInStr(FileGetAttrib($sPath), 'D') Then Return SetError(1, 0, 0) $sPath = FileGetLongName($sPath) Local $oFSO = ObjCreate('Scripting.FileSystemObject') If @error Then Return SetError(2, 0, 0) _GUICtrlTreeView_BeginUpdate($hTreeView) _GUICtrlTreeView_DeleteAll(GUICtrlGetHandle($hTreeView)) Local $hTreeViewItem = GUICtrlCreateTreeViewItem($sPath, $hTreeView) GUICtrlSetColor(-1, $FolderColor) _GUICtrlTreeView_SetIcon($hTreeView, $hTreeViewItem, 'shell32.dll', 111) $Folder = $oFSO.GetFolder($sPath) _CreateDirectoryRecursive($hTreeView, $Folder, $hTreeViewItem, $bFiles, $aCount) If $bFiles Then For $Files In $Folder.Files $hFileItem = GUICtrlCreateTreeViewItem($Files.Name, $hTreeViewItem) $aCount[1] += 1 Next EndIf _GUICtrlTreeView_SetIcon($hTreeView, $hTreeViewItem, 'shell32.dll', 3, 2) _GUICtrlTreeView_SetIcon($hTreeView, $hTreeViewItem, 'shell32.dll', 110, 4) _GUICtrlTreeView_EndUpdate($hTreeView) GUICtrlSetState($hTreeViewItem, $GUI_EXPAND) $oFSO = '' Return $aCountEndFunc ;==>_GUICtrlTreeView_CreateDirectory
    Func _CreateDirectoryRecursive($hTreeView, $Folder, $ItemOld, $bFiles, ByRef $aCount) Local $hFolderItem, $hFileItem, $FolderColor = 0x0000FF For $Subfolder In $Folder.SubFolders $hFolderItem = GUICtrlCreateTreeViewItem($Subfolder.Name, $ItemOld) GUICtrlSetColor(-1, $FolderColor) _GUICtrlTreeView_SetIcon($hTreeView, $hFolderItem, 'shell32.dll', 3, 2) _GUICtrlTreeView_SetIcon($hTreeView, $hFolderItem, 'shell32.dll', 110, 4) $aCount[0] += 1 _CreateDirectoryRecursive($hTreeView, $Subfolder, $hFolderItem, $bFiles, $aCount) If $bFiles Then For $Files In $Subfolder.Files $hFileItem = GUICtrlCreateTreeViewItem($Files.Name, $hFolderItem) $aCount[1] += 1 Next EndIf NextEndFunc ;==>_CreateDirectoryRecursive

    [/autoit]
  • Ich denke wenn du Zeile 71 durch das ersetzt

    [autoit]

    GUICtrlSetData($notizen,StringTrimLeft($readini, StringInStr($readini, @CRLF, 0, 4)))

    [/autoit]


    dann ist es so wie du es haben willst.

    Das einfügen des Quellcodes ist ein Bug, bzw liegt das am Browser.

  • Ich sähe da mehrere Möglichkeiten.
    1.:
    FileReadToArray ( "filehandle/filename" )
    -> Du machst dann ne For-Schleife und fügst alles mit _GUICtrlEdit_AppendText() Zeile für Zeile an, oder sammelst alles in einem String und setzt dann den Inhalt der EditBox mit guictrlsetstate(). Dabei lässt du dann die ersten 4-Array Elemente aus.
    2.:
    $ar=Stringsplit( FileRead()
    ,@crlf,1)
    und dann das gleiche mit der For-Schleife wie oben.

    Das wären jetzt die Möglichkeiten, die ich genommen hätte.

    Viel Glück noch, Kana.

  • Ich denke wenn du Zeile 71 durch das ersetzt

    [autoit]

    GUICtrlSetData($notizen,StringTrimLeft($readini, StringInStr($readini, @CRLF, 0, 4)))

    [/autoit]


    dann ist es so wie du es haben willst.

    Das einfügen des Quellcodes ist ein Bug, bzw liegt das am Browser.

    Bitte entschuldigt die verspätete Antwort und vielen Dank für Eure Vorschläge. Ich habe als erstes das ganze von Schnitzel getestet und siehe da - läuft 1A - genauso wie ich es eigtl benötige :)

    Vielen Dank nochmal an Euch beide für die Hilfestellung!

    Mein AutoIT Smartphone GUI >>hier<<

    Der Mensch ist das einzige Tier, dass arbeiten muss.