AddFile

  • hallo zusammen,

    ich habe das problem schon mal im forum erstellt, habe leider noch keine hilfe bekommen, vllt habe ich das problem nicht gut beschrieben.
    da ist mein Code

    Spoiler anzeigen
    [autoit]

    #cs ----------------------------------------------------------------------------

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

    AutoIt Version: 3.3.8.1
    Author:

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

    Script Function:
    Template AutoIt script.

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

    #ce ----------------------------------------------------------------------------

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

    ; Script Start - Add your code below here

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

    #include <GUIConstantsEx.au3>
    #include <Array.au3>
    #include <ListViewConstants.au3>
    #include <Guilistview.au3>
    #include <ButtonConstants.au3>
    #include <WindowsConstants.au3>
    #include <Date.au3>
    #include <File.au3>

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

    Global $sHeader = "QUELLE|ZIEL|PROFIL"
    Global $iEdit = -1
    Global $sDBFile = @DesktopDir & "\datenbank.txt"
    Local $MoveFile = 'F:\PoolData\#Move'

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

    #Region Hauptfenster
    Global $MainGui = GUICreate("Listview-Datenbank", 800, 600) ; Hauptfenster erstellen
    Global $MainGUI_ListView = GUICtrlCreateListView($sHeader, 10, 0, 780, 500, $LVS_SHOWSELALWAYS) ; Listview erstellen

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

    Global $MainGui_Handle = GUICtrlGetHandle($MainGUI_ListView) ; das Handle vom Listview wird für die UDF-Listview-Funktionen benötigt
    _GUICtrlListView_SetColumn($MainGui_Handle, 0, "QUELLE", 320, 0)
    _GUICtrlListView_SetColumn($MainGui_Handle, 1, "ZIEL", 320, 0)
    _GUICtrlListView_SetColumn($MainGui_Handle, 2, "PROFIL", 160, 0)

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

    Global $MainGui_Button_New = GUICtrlCreateButton("Neuer Eintrag", 10, 530, 80, 50, $BS_DEFPUSHBUTTON) ; Dieser Button ist der Default-Push-Button (wenn der User [Enter] drückt)
    Global $Maingui_Button_Edit = GUICtrlCreateButton("Markierten Eintrag bearbeiten", 120, 530, 110, 50, $BS_MULTILINE) ; $BS_Multiline für mehrzeiligen Button
    Global $MainGui_Button_inputFile = GUICtrlCreateButton("InputFile", 260, 530, 70, 50)
    Global $MainGui_Button_MoveFiles = GUICtrlCreateButton("Move File(s)",350,530,70,50)
    Global $MainGui_Button_Save = GUICtrlCreateButton("Speichern", 440, 530, 70, 50)
    Global $MainGui_Button_Del = GUICtrlCreateButton("Markierte Einträge löschen", 540, 530, 90, 50, $BS_MULTILINE)
    Global $MainGui_Button_DelAll = GUICtrlCreateButton("Alle Einträge löschen", 660, 530, 90, 50, $BS_MULTILINE)

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

    Global $MainGui_CM = GUICtrlCreateContextMenu($MainGUI_ListView) ; ein Kontextmenü für das Listview erstellen
    Global $MainGui_CMNew = GUICtrlCreateMenuItem("Neuer Eintrag", $MainGui_CM) ; der 1. Kontextmenüeintrag
    Global $MainGui_CMEdit = GUICtrlCreateMenuItem("Eintrag bearbeiten", $MainGui_CM) ; der 2. Kontextmenüeintrag
    Global $MainGui_CMDel = GUICtrlCreateMenuItem("Markierte Einträge löschen", $MainGui_CM) ; der 3. Kontextmenüeintrag
    #EndRegion Hauptfenster

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

    #Region Fenster für neuen Eintrag
    Global $SubGui_NewLine = GUICreate("Neuer Eintrag", 632, 140, -1, -1, $WS_SYSMENU) ; das Fenster "Neuer Eintrag" erstellen
    Global $NewLine_Header = StringSplit($sHeader, '||') ; Überschriften-Array
    Global $Input_NewLine[$NewLine_Header[0]] ; Array für die Input-IDs
    For $i = 1 To $NewLine_Header[0]
    GUICtrlCreateLabel($NewLine_Header[$i], 1 + ($i-1) * 225, 15, 110, 20) ; Überschriften-Label erstellen
    $Input_NewLine[$i-1] = GUICtrlCreateInput("", 2 + ($i-1) * 200, 30, 220, 20, Default, $WS_EX_STATICEDGE) ; Eingabefelder erstellen
    Next
    Global $Button_Create = GUICtrlCreateButton("Eintrag speichern", 154, 65, 120, 25, $BS_DEFPUSHBUTTON) ; Button zum speichern
    Global $Button_CLose = GUICtrlCreateButton("schließen", 354, 65, 120, 25)
    #EndRegion Fenster für neuen Eintrag

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

    _GUICtrlListView_RegisterSortCallBack($MainGui_Handle)
    GUISetState(@SW_SHOW, $MainGui)

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

    While 1
    $nMsg = GUIGetMsg(1)
    Switch $nMsg[0]
    Case $MainGUI_ListView ; User hat auf eine Spaltenüberschrift geklickt
    _GUICtrlListView_SortItems($MainGui_Handle, GUICtrlGetState($MainGUI_ListView))

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

    Case $MainGui_Button_New, $MainGui_CMNew ; User hat auf "Neuer Eintrag" geklickt
    WinSetTitle($SubGui_NewLine, "", "Neuer Eintrag")
    GUISetState(@SW_SHOW, $SubGui_NewLine) ; das Fenster "Neuer Eintrag" anzeigen
    GUISetState(@SW_DISABLE, $MainGui) ; das Hauptfenster deaktivieren

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

    Case $Button_Create ; User hat auf "Eintrag speichern" im Fenster "Neuer Eintrag" geklickt
    NewItem()

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

    Case $Maingui_Button_Edit, $MainGui_CMEdit ; User hat auf "Eintrag bearbeiten" geklickt
    WinSetTitle($MainGui_CMNew, "", "Eintrag bearbeiten")
    GUISetState(@SW_SHOW, $SubGui_NewLine)
    GUISetState(@SW_DISABLE, $MainGui)
    Edit()

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

    Case $MainGui_Button_inputFile ; User hat auf "InputFile" geklickt
    AddRandomFiles ()

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

    Case $MainGui_Button_MoveFiles ; User hat auf "MoveFile" geklickt
    ;MultiFileMove()

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

    Case $MainGui_Button_Save ; User hat auf "speichern" geklickt
    Save()

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

    Case $MainGui_Button_Del, $MainGui_CMDel ; User hat auf "Markierte Einträge löschen" geklickt
    If MsgBox(256 + 32 + 4, "Einträge löschen", "Wollen sie die markierten Einträge wirklich löschen?") = 6 Then _GUICtrlListView_DeleteItemsSelected($MainGui_Handle)

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

    Case $MainGui_Button_DelAll ; User hat auf "Alle Einträge löschen" geklickt
    If MsgBox(256 + 32 + 4, "Einträge löschen", "Wollen sie wirklich alle Einträge löschen?") = 6 Then _GUICtrlListView_DeleteAllItems($MainGui_Handle)

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

    Case $Button_CLose ; User hat auf "schließen" im Fenster "Neuer Eintrag" geklickt
    GUISetState(@SW_HIDE, $SubGui_NewLine)
    GUISetState(@SW_ENABLE, $MainGui)
    WinActivate($MainGui)

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

    Case $GUI_EVENT_CLOSE ; User hat auf das Schließen-Symbol geklickt (bzw. die ESC-Taste gedrückt)
    Switch $nMsg[1] ; erweiterte Abfrage für welches Fenster
    Case $MainGui ; User will das Hauptfenster schließen
    If MsgBox(32 + 4, "Beenden", "Wollen sie das Programm wirklich beenden?") = 6 Then End() ; wenn ja, dann End-Funktion aufrufen
    Case $SubGui_NewLine ; User will das "Neuer Eintrag"-Fenster schließen
    $iEdit = -1
    For $i = 0 To UBound($Input_NewLine) - 1
    GUICtrlSetData($Input_NewLine[$i], "") ; Alle Eingabefelder leeren
    Next
    GUISetState(@SW_HIDE, $SubGui_NewLine) ; "Neuer Eintrag"-Fenster verstecken
    GUISetState(@SW_ENABLE, $MainGui) ; Hauptfenster wieder aktivieren
    WinActivate($MainGui) ; und in den Vordergrund holen
    EndSwitch
    EndSwitch
    WEnd

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

    Func NewItem() ; Funktion zum auslesen der Eingabefelder (Neuer Eintrag bzw. Eintrag bearbeiten)
    Local $sItem = ""
    For $i = 0 To UBound($Input_NewLine) - 1 ; Schleife, um alle Eingabefelder durchzugehen
    If $iEdit > -1 Then ; wenn $iEdit > -1 (Eintrag bearbeiten), dann...
    _GUICtrlListView_SetItemText($MainGui_Handle, $iEdit, GUICtrlRead($Input_NewLine[$i]), $i) ; den Eintrag aus dem Eingabefeld ins Listview schreiben
    Else ; sonst $iEdit = -1 (neuer Eintrag)
    $sItem &= GUICtrlRead($Input_NewLine[$i]) & "|" ; den Eintrag aus dem Eingabefeld erstmal in einer Variablen ($sItem) speichern
    GUICtrlSetData($Input_NewLine[$i], "") ; das entsprechende Eingabefeld leeren
    EndIf
    Next
    If $iEdit > -1 Then ; wenn $iEdit > -1 (Eintrag bearbeiten), dann...
    $iEdit = -1
    GUISetState(@SW_HIDE, $SubGui_NewLine) ; "Neuer Eintrag"-Fenster verstecken
    GUISetState(@SW_ENABLE, $MainGui) ; Hauptfenster wieder aktivieren
    Sleep(3000)
    WinActivate($MainGui) ; und in den Vordergrund holen
    Else ; sonst $iEdit = -1 (neuer Eintrag)
    GUICtrlSetState($NewLine_Header[0], $GUI_FOCUS) ; den Focus wieder auf das erste Eingabefeld setzen, für weitere Eingaben
    GUICtrlCreateListViewItem(StringTrimRight($sItem, 1), $MainGui_ListView) ; mit den Werten aus $sItem einen neuen Listview-Eintrag hinzufügen
    EndIf
    EndFunc ;==>NewItem

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

    Func Edit() ; Funktion zum bearbeiten eines Listview-Eintrags im "Eintrag bearbeiten"-Fenster
    $iEdit = _GUICtrlListView_GetSelectionMark($MainGui_Handle) ; auslesen, welcher Listview-Eintrag markiert (bei mehreren, den obersten) ist
    If $iEdit > -1 Then
    Local $aItem = _GUICtrlListView_GetItemTextArray($MainGui_Handle, $iEdit) ; die Einträge aus dem Listview in ein Array holen
    For $i = 1 To $aItem[0]
    GUICtrlSetData($Input_NewLine[$i - 1], $aItem[$i]) ; und in die entsprechenden Eingabefelder schreiben
    Next
    EndIf
    EndFunc ;==>Edit

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

    Func AddRandomFiles()
    Local $TempArray[1]
    Local $aList = _FileListToArray($MoveFile, '*', 1)
    If Not IsArray($aList) Then Return SetError(1, 0, '')
    Local $iRan
    For $i = 0 To 20
    $iRan = Random(1, $aList[0], 1)
    _ArraySearch($TempArray, $aList[$iRan]); Suchen ob Eintrag schon existiert
    If @error Then; Eintrag existiert nicht
    GUICtrlCreateListViewItem($MoveFile & '\' & $aList[$iRan] & '|' & $MoveFile & '\' & $aList[$iRan], $MainGUI_ListView)
    _ArrayAdd($TempArray, $aList[$iRan]); Datei in Liste einfügen
    EndIf
    Next
    Return
    EndFunc ;==> AddRandomFiles

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

    Func Save() ; Datenbank-Datei speichern
    Local $sItem
    Local $iCount = _GUICtrlListView_GetItemCount($MainGui_Handle) - 1
    Local $NeuFile = FileOpen($sDBFile, 2)
    If $NeuFile <> -1 Then
    For $i = 0 To $iCount
    $sItem = _GUICtrlListView_GetItemTextString($MainGui_Handle, $i)
    FileWriteLine($NeuFile, $sItem)
    Next
    FileClose($NeuFile)
    EndIf
    EndFunc ;==>Save

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

    Func End()
    Save()
    _GUICtrlListView_UnRegisterSortCallBack($MainGui_Handle)
    Exit ; Programm beenden
    EndFunc

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


    ich wollte die Funktion AddRandomFiles() so schreiben: ich habe meine Quelle, Ziel und Profil in einem txt file definiert bsp. f:\PoolData\PoolEMDB_bck\MGF3-YZ1.txt;F:\20_Endmessen\30_Charakterisierung\MGF3-YZ1.txt;MGFT3-YZ

    und möchte dass meine Quelle: f:\PoolData\PoolEMDB_bck\MGF3-YZ1.txt
    Ziel : F:\20_Endmessen\30_Charakterisierung\MGF3-YZ1.txt
    profil : MGFT3-YZ

    in GUI listView einfügen.

    ich bekomme aber in mein GUI ListView nicht den Inhalt sondern den name von dem File und schreibt das gleiche bei der Quelle und Ziel, so sieht das aus:

    Einmal editiert, zuletzt von haspop (23. Juli 2012 um 10:42)

  • Hallo haspop,

    du willst hier eine Lösung für ein Problem, für das du schon öfters hier angefagt hast:

    Gerade dein Verhalten in [*][ gelöst ] InputBox ist sehr unhöflich und zeigt dass du zwar Hilfe erwartest aber nicht bereit bist etwas dazu zu tun. Am Ende setzt du den Beitrag auf gelöst und löschst alle deine Beiträge.

    @Mod/Admin: bitte die gelöschten Beiträge dort wieder herstellen und hier schliessen, da es immer noch das gleiche Problem ist,

    Edit: und jetzt löschst du auch noch die Beiträhe in deinem anderen Thema, unverschämt :cursing:

    mfg autoBert

    4 Mal editiert, zuletzt von autoBert (18. Juli 2012 um 17:39)

  • autoBert , das war nicht so gemein ich wollte nur präziser sein sonst hätte das auch nicht hier geschrieben "ich habe das problem schon mal im forum erstellt" ich habe zwar ein fehler gemacht aber unhöflich war das nicht, ich wollte schon die 2 beiträge löschen um das problem besser zu beschreiben wusste aber nicht wie es geht, bin ja ganz neu im forum drin, also tut mir leid @Mod/Admin : bitte die gelöschten Beiträge dort wieder herstellen und hier schliessen

    mfg haspop

  • autobert, ich habe die anderen Beiträge gelöscht vondaher kann ich hier nach hilfe fragen :)

    • Offizieller Beitrag

    autobert, ich habe die anderen Beiträge gelöscht vondaher kann ich hier nach hilfe fragen


    Wenn du das nochmals tust, trete ich dir (wenn auch nur symbolisch) in den Allerwertesten! Dir steht der Edit-Mode zur Verfügung, somit kannst du jederzeit deine Posts ergänzen. Löschen ist höchst unhöflich, da somit die anderen Post sinnfrei in der Luft hängen.

  • autobert, ich habe die anderen Beiträge gelöscht vondaher kann ich hier nach hilfe fragen :)


    Dann stelle wenihsten ein paar Dateuen zum testen ein. Beuspieldaten dent sich keiner gerne aus und meist sind dann irgendelcheBesonderheiten nicht brücksichtigt,

    mfg autoBert

  • also auf dem bild sieht man die filenamen und in jede file steht dann ein zeil wo die Quelle; Ziel ; Profil drin stehen so sieht das aus:
    f:\PoolData\PoolEMDB_bck\MGF3-YZ1.txt;F:\20_Endmessen\30_Charakterisierung\MGF3-YZ1.txt;MGFT3-YZ

    f:\PoolData\PoolEMDB_bck\MGF3-YY1.txt;F:\20_Endmessen\40_Erbprobung\MGF3-YY1.txt;MGFT3-YY

    f:\PoolData\PoolEMDB_bck\MGF4-YZ1.txt;F:\20_Endmessen\30_Charakterisierung\MGF4-YZ1.txt;MGFT4-YZ
    f:\PoolData\PoolEMDB_bck\MGX3-YZ1.txt;F:\20_Endmessen\40_Erprobung\MGX3-YZ1.txt;MGXT3-YZ


    .....
    .....usw.

    jetzt will ich diese Zeilen in mein GUI Listview einfügen, wie kann ich dann den Inhalt und nicht der filename einfügen?

    mfg haspop

  • so sieht das aus

    ich will nicht wissen wie es aussieht, sondern Dateien die ich einfach kopieren kann. Ich mach mir doch nicht mehr Arbeit fürs Vorbereiten als ich für die Lösung benötige. So bleibt als Tipp nur: ich würde

    [autoit]

    StringSplit

    [/autoit]

    nehmen

    mfg autoBert

    Einmal editiert, zuletzt von autoBert (19. Juli 2012 um 11:38)

  • Wie autoBert schon gesagt hat einfach mit StringSplit arbeiten etwa so:

    [autoit]

    $var1 = StringSplit("f:\PoolData\PoolEMDB_bck\MGF3-YZ1.txt;F:\20_Endmessen\30_Charakterisierung\MGF3-YZ1.txt;MGFT3-YZ",";")

    [/autoit]

    Dann einfach das letzte Element von dem Array ausgeben lassen:

    [autoit]

    $daten = $var1[3]

    [/autoit]

    :thumbup:

  • Mit einer For Schleife kannst du dann jeden String bearbeiten lassen oder wie meinst du das? Irgendwie versteh ich nicht was du willst. Geht es dir eben nur um (s.Beispiel von dir) MGFT3-YY oder willst du mit zb. FileReadLine in die Datei rein und das auslesen?

    :thumbup:

  • es geht mir darum wie man einen Stringsplit in ein Array aufteilen kann, einfach geklärt: möchte den inhalt(Line) meine TXT.Files die in F:\PoolData\File stehen, in GUI ListView einfach einfügen

  • [autoit]


    #Include <Array.au3>

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

    Local $array[10] ;dein neues Array mit der Inhalt Line
    Local $array2[3] ;die Pfade mit dem Inhalt die gesplitet werden sollen
    $array2[0] = "f:\PoolData\PoolEMDB_bck\MGF3-YY1.txt;F:\20_Endmessen\40_Erbprobung\MGF3-YY1.txt;MGFT3-YY"
    $array2[1] = "f:\PoolData\PoolEMDB_bck\MGF4-YZ1.txt;F:\20_Endmessen\30_Charakterisierung\MGF4-YZ1.txt;MGFT4-YZ"
    $array2[2] = "f:\PoolData\PoolEMDB_bck\MGX3-YZ1.txt;F:\20_Endmessen\40_Erprobung\MGX3-YZ1.txt;MGXT3-YZ"

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

    For $i = 0 to UBound($array2) -1
    $schnips = StringSplit($array2[$i],";")
    _ArrayAdd($array,$schnips[3]) ;oder vil. besser _ArrayInsert
    Next

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

    _ArrayDisplay($array)

    [/autoit]

    :thumbup:

    Einmal editiert, zuletzt von bobekos (19. Juli 2012 um 15:21)

  • ich habe die Funktion so erstellt :

    Spoiler anzeigen
    [autoit]

    Func AddRandomFiles()

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

    Local $TempArray[1]
    Global $aList = _FileListToArray($MoveFile, '*', 1)

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

    If Not IsArray($aList) Then Return SetError(1, 0, '')

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

    For $i = 0 To 2
    $iRan = Random(1, $aList[0], 1)
    _ArraySearch($TempArray, $aList[$iRan]); Suchen ob Eintrag schon existiert
    $arr = StringSplit(FileRead($aList[$iRan]), ";")
    If @error Then; Eintrag existiert nicht
    GUICtrlCreateListViewItem($aList[$iRan] &"|"& $aList[$iRan] &"|"& $aList[$iRan], $MainGUI_ListView)
    _ArrayAdd($TempArray, $aList[$iRan]); Datei in Liste einfügen
    EndIf
    Next
    Return
    EndFunc ;==> AddRandomFiles

    [/autoit]

    zeigt mir aber nur die datein namen und nicht den Inhalt, habe ich da was falsch gemacht?
    so sieht aus :

  • ja du gibt ihn ja auch nicht den entsprechenden StringSplit versuch es mal mit:

    $arr[0] usw. das sind die entsprechenden Elemente
    also:

    [autoit]


    GUICtrlCreateListViewItem($aList[$arr[0]] &"|"& $aList[$arr[1]] &"|"& $aList[$arr[2]], $MainGUI_ListView)

    [/autoit]

    :thumbup:

  • ja das Problem ich will die files nicht manuell im code eingeben, sondern alle automatisch einfügen das ist ja das ziel davon sonst konnte ich die einfach bei Neue Eintrag manuell eingeben

  • ja du hast doch da deine Funktion mit der For Schleife:

    also statt

    [autoit]

    GUICtrlCreateListViewItem($aList[$iRan] &"|"& $aList[$iRan] &"|"& $aList[$iRan], $MainGUI_ListView)

    [/autoit]

    einfach:

    [autoit]

    GUICtrlCreateListViewItem($aList[$arr[0]] &"|"& $aList[$arr[1]] &"|"& $aList[$arr[2]], $MainGUI_ListView)

    [/autoit]

    wenn das nicht das ist was du willst dann hab ich absolut keine Ahnung was du meinst...

    :thumbup: