Probleme mit FileOpen

  • Halli Hallo,

    ich hab vor ca. 2 wochen angefangen mit AutoIt zu programmieren und hab mich schließlich auch dazu entschlossen mich hier zu registrieren, da mir einige posts doch sehr viel weiter geholfen haben :D

    und natürlich hoffe ich dass ihr mir auch bei meinem problem weiterhelfen könnt..

    Es geht sich dabei um folgendes:
    Es sollen 3 txt-dateien (in jeder steht pro zeile nur ein Wort) miteinander verglichen werden, und anschließend soll mir in einer 4. datei das jeweilige Wort ausgegeben werden und auch in welchen listen es steht..

    ich bin schon soweit dass ich jedes wort aus jeder liste in meiner zieldatei habe, mit angabe in welchen listen das wort steht.. nur sollen die doppelten wörter ignoriert werden

    so oder so ähnlich sieht meine zieldatei aus:
    wort1 --> In list1 und list3 vorhanden
    wort2 --> In list1 und list2 vorhanden
    wort3 --> In allen!
    wort1 --> In list3 und list1 vorhanden

    sprich wort1 soll nur einmal auftauchen

    mein script zum überprüfen ob das wort schon in meiner zieldatei steht, sieht so aus

    [autoit]

    If $zaehler > 0 Then
    $f_compAUS = FileOpen($ausgabe)
    $f_countAUS = _FileCountLines($ausgabe)
    FileClose($f_compAUS)

    For $count = 1 To $f_countAUS
    $sheet = FileOpen($ausgabe)
    $f_readAUS =FileReadLine($sheet, $count)
    $s_split2 = StringSplit($f_readAUS, @TAB)
    $s_compAUS = StringCompare($f_read1, $s_split2[1], 0)
    If $s_compAUS <> 0 Then
    $n3 = $n3 + 1
    EndIf
    FileClose($sheet)
    Next

    Else
    $count = 1
    EndIf

    [/autoit]

    (sorry dass das script so aussieht ^^ aber hab wie gesagt erst vor kurzem angefangen...)

    nur leider kann die zieldatei nicht geöffnet werden. das FileOpen in Zeile 2 gibt mir immer nur fehler aus.. ich häng an dem problem schon ne weile und die suchfunktion hat mir leider nicht helfen können. ich hoffe ma dass ihr das könnt ;)

    vielen vielen dank schon im voraus

    liebe grüße und so :D

    2 Mal editiert, zuletzt von das_beNe.xD (13. April 2010 um 15:11)

  • Sorry dass ich jetzt erst antworte :D
    konnts gestern nicht ausprobieren weil ich das ganze script im büro vergessen hab -.-

    aber habs jetzt getestet, es funktioniert aber leider immer noch nicht.. ich krieg immer noch alles doppelt und dreifach in die liste geballert :pinch:

    trotzdem danke für den hinweis

  • Zeig doch mal das gesamte Script, deine Dateien mit den Listen und deine Zieldatei, wie die aussehen soll.

  • Also ich hab das gesamte Script auf 3 kleinere verteilt die ich in dem hauptscript included hab..

    Script 1

    Spoiler anzeigen
    [autoit]

    ; ----- Selbstverfasste Scripts -----
    #include <Auslesen.au3>
    #include <Vergleich.au3>

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

    ; ----- Erstellen der GUI -----
    GUICreate("Datenabgleich", 500, 190, 75, 50)

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

    ; ----- Erstellen der Labels -----
    GUICtrlCreateLabel("Liste 1", 15, 10)
    GUICtrlCreateLabel("Liste 2", 15, 35)
    GUICtrlCreateLabel("Liste 3", 15, 60)
    GUICtrlCreateLabel("Output", 15, 100)

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

    ; ----- Erstellen der Textfelder -----
    $list1 = GUICtrlCreateInput("G:\Scripts\Datenvergleich\Quelldateien\liste1.txt" , 55, 6, 350, 20, $ES_READONLY + $ES_AUTOHSCROLL)
    $list2 = GUICtrlCreateInput("G:\Scripts\Datenvergleich\Quelldateien\liste2.txt", 55, 31, 350, 20, $ES_READONLY + $ES_AUTOHSCROLL)
    $list3 = GUICtrlCreateInput("G:\Scripts\Datenvergleich\Quelldateien\liste3.txt", 55, 56, 350, 20, $ES_READONLY + $ES_AUTOHSCROLL)
    $list4 = GUICtrlCreateInput(@DesktopDir & "\123.txt", 55, 96, 350, 20, $ES_READONLY + $ES_AUTOHSCROLL)

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

    ; ----- Erstellen der Browse-Buttons -----
    $browse1 = GUICtrlCreateButton("Durchsuchen", 410, 6, 75, 20)
    $browse2 = GUICtrlCreateButton("Durchsuchen", 410, 31, 75, 20)
    $browse3 = GUICtrlCreateButton("Durchsuchen", 410, 56, 75, 20)
    $browse4 = GUICtrlCreateButton("Durchsuchen", 410, 96, 75, 20)

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

    $clear = GUICtrlCreateButton("Alles Zurücksetzen", 15, 140, 235, 20)

    $comp = GUICtrlCreateButton("Vergleichen", 250, 140, 235, 20)

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

    $end = GUICtrlCreateButton("Beenden", 15, 165, 470, 20)

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

    GUISetState(@SW_SHOW)

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

    While 1
    $msg = GUIGetMsg()

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

    ; ----- If-Funktionen -----
    If $msg = $browse1 Then
    $path1 = FileOpenDialog("Liste 1", @DesktopDir, "Alle Dateien (*.*)", 1)
    GUICtrlSetData($list1, $path1)

    ElseIf $msg = $browse2 Then
    $path2 = FileOpenDialog("Liste 2", @DesktopDir, "Alle Dateien (*.*)", 1)
    GUICtrlSetData($list2, $path2)

    ElseIf $msg = $browse3 Then
    $path3 = FileOpenDialog("Liste 3", @DesktopDir, "Alle Dateien (*.*)", 1)
    GUICtrlSetData($list3, $path3)

    ElseIf $msg = $browse4 Then
    $path4 = FileOpenDialog("Output", @DesktopDir, "Textdokumente (*.txt)", 8)
    GUICtrlSetData($list4, $path4)
    EndIf

    if $msg = $clear Then
    GUICtrlSetData($list1, "")
    GUICtrlSetData($list2, "")
    GUICtrlSetData($list3, "")
    GUICtrlSetData($list4, "")
    EndIf

    ; ----- Funktionsaufrufe -----
    If $msg = $comp Then
    If GUICtrlRead($list4) = "" Then
    MsgBox(0, "Fehler!", "Es wurde kein Outputpfad angegeben.")

    ElseIf GUICtrlRead($list1) = "" Or GUICtrlRead($list2) = "" Or GUICtrlRead($list3) = "" Then
    MsgBox(0, "Fehler!", "Es wurden nicht alle Quellpfade angegeben!")

    Else
    GUICtrlSetState($comp, $GUI_DISABLE)

    ;~ _FileCreate(GuiCtrlRead($list4))
    $nice = FileOpen(GuiCtrlRead($list4), 1)
    FileWriteLine($nice, "########################################################")
    FileClose($nice)

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

    Sleep(500)

    Call("_liste1")
    Call("_liste2")
    Call("_liste3")

    Sleep(500)

    For $i = 0 To 2
    Call("_vergleich", "list1", "list2", "list3", GUICtrlRead($list4), $i)
    Next

    ;~ FileDelete(@DesktopDir & "\*.elefant")

    GUICtrlSetState($comp, $GUI_ENABLE)
    EndIf
    EndIf

    ; ----- Abbruch -----
    If $msg = $GUI_EVENT_CLOSE Or $msg = $end Then
    ExitLoop
    EndIf

    WEnd

    [/autoit]

    Script 2

    Spoiler anzeigen
    [autoit]

    ; ----- Liste 1 auslesen -----

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

    Func _liste1()

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

    $f_list1 = FileOpen(GUICtrlRead($list1), 0)

    If $f_list1 = -1 Then
    MsgBox(0, "Fehler", "Datei konnte nicht geöffnet werden.")
    Exit
    EndIf

    $count_list1 = _FileCountLines(GUICtrlRead($list1))
    For $i = 1 To $count_list1
    $l_list1 = FileReadLine($f_list1, $i)
    $split1 = StringSplit($l_list1, ".")
    $write1 = FileOpen(@DesktopDir & "\list1.txt", 1)
    FileWriteLine($write1, $split1[1])
    FileClose($write1)
    Next
    EndFunc

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

    ;----- Liste 2 auslesen -----

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

    Func _liste2()

    $f_list2 = FileOpen(GUICtrlRead($list2), 0)

    If $f_list2 = -1 Then
    MsgBox(0, "Fehler", "Datei konnte nicht geöffnet werden.")
    Exit
    EndIf

    $count_list2 = _FileCountLines(GUICtrlRead($list2))
    For $i = 1 To $count_list2
    $l_list2 = FileReadLine($f_list2, $i)
    $split2 = StringSplit($l_list2, ".")
    $write2 = FileOpen(@DesktopDir & "\list2.txt", 1)
    FileWriteLine($write2, $split2[1])
    FileClose($write2)
    Next
    EndFunc

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


    ; ----- Liste 3 auslesen -----

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

    Func _liste3()

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

    $f_list3 = FileOpen(GUICtrlRead($list3), 0)

    If $f_list3 = -1 Then
    MsgBox(0, "Fehler", "Datei konnte nicht geöffnet werden.")
    Exit
    EndIf

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

    $count_list3 = _FileCountLines(GUICtrlRead($list3))
    For $i = 1 To $count_list3
    $l_list3 = FileReadLine($f_list3, $i)
    $split3 = StringSplit($l_list3, ".")
    $write3 = FileOpen(@DesktopDir & "\list3.txt", 1)
    FileWriteLine($write3, $split3[1])
    FileClose($write3)
    Next
    EndFunc

    [/autoit]

    und Script 3

    Spoiler anzeigen
    [autoit]

    Func _vergleich($listVer1, $listVer2, $listVer3, $ausgabe, $zaehler)

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

    Select
    Case $zaehler = 1
    $listVerg1 = $listVer2
    $listVerg2 = $listVer1
    $listVerg3 = $listVer3
    Case $zaehler = 2
    $listVerg1 = $listVer3
    $listVerg2 = $listVer2
    $listVerg3 = $listVer1
    Case Else
    $listVerg1 = $listVer1
    $listVerg2 = $listVer2
    $listVerg3 = $listVer3
    EndSelect

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

    $f_comp1 = FileOpen(@DesktopDir & "\" & $listVerg1 & ".txt")
    $f_count1 = _FileCountLines(@DesktopDir & "\" & $listVerg1 & ".txt")

    $f_comp2 = FileOpen(@DesktopDir & "\" & $listVerg2 & ".txt")
    $f_count2 = _FileCountLines(@DesktopDir & "\" & $listVerg2 & ".txt")

    $f_comp3 = FileOpen(@DesktopDir & "\" & $listVerg3 & ".txt")
    $f_count3 = _FileCountLines(@DesktopDir & "\" & $listVerg3 & ".txt")

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

    For $x = 1 To $f_count1
    $f_read1 = FileReadLine($f_comp1, $x)
    $n1 = 1

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

    For $y = 1 To $f_count2
    $f_read2 = FileReadLine($f_comp2, $y)
    $s_comp12 = StringCompare($f_read1, $f_read2)

    If $s_comp12 <> 0 Then
    $n1 = $n1 + 1
    EndIf
    Next

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

    $n2 = 1
    For $z = 1 To $f_count3
    $f_read3 = FileReadLine($f_comp3, $z)
    $s_comp13 = StringCompare($f_read1, $f_read3)

    If $s_comp13 <> 0 Then
    $n2 = $n2 + 1
    EndIf
    Next

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

    $n3 = 1

    If $zaehler > 0 Then
    $f_compAUS = FileOpen($ausgabe, 0)
    $f_countAUS = _FileCountLines($ausgabe)
    FileClose($f_compAUS)

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

    For $count = 1 To $f_countAUS
    $sheet = FileOpen($ausgabe, 1)
    $f_readAUS =FileReadLine($sheet, $count)
    $s_split2 = StringSplit($f_readAUS, @TAB)
    $s_compAUS = StringCompare($f_read1, $s_split2[1], 0)
    If $s_compAUS <> 0 Then
    $n3 = $n3 + 1
    EndIf
    FileClose($sheet)
    Next
    Else
    $count = 1
    EndIf

    $goal = FileOpen($ausgabe, 1)

    If $n3 = $count Then
    If $n1 = $y And $n2 = $z Then
    FileWriteLine($goal, $f_read1 & @TAB & @TAB & "In " & $listVerg1 & " vorhanden")
    ElseIf $n1 = $y Then
    FileWriteLine($goal, $f_read1 & @TAB & @TAB & "In " & $listVerg1 & " und " & $listVerg3 & " vorhanden")
    ElseIf $n2 = $z Then
    FileWriteLine($goal, $f_read1 & @TAB & @TAB & "In " & $listVerg1 & " und " & $listVerg2 & " vorhanden")
    Else
    FileWriteLine($goal, $f_read1 & @TAB & @TAB & "In allen!")
    EndIf
    EndIf
    Next

    FileClose(@DesktopDir & "\" & $listVerg1 & ".txt")
    FileClose(@DesktopDir & "\" & $listVerg2 & ".txt")
    FileClose(@DesktopDir & "\" & $listVerg3 & ".txt")
    FileClose($goal)
    EndFunc

    [/autoit]

    und so sehen die Listen aus

    Spoiler anzeigen

    liste 1
    -----------------
    Schenk
    Schinken
    Wurstbrot
    Kaiser
    Klaus
    Hund
    Kuchen
    Elefant
    Plattenspieler
    CDLaufwerk
    Hunderennen
    Studio
    Kloschuessel


    liste 2
    ----------------
    Schinken.43623
    Karussel
    Schulhof
    Arbeitsklima
    Studio
    Tastatur
    Job.08012010
    Zeitarbeit
    Wurstbrot


    liste 3
    ----------------
    Wilhelm.325
    Franz.14753
    Ferdinand.967
    Oesterreich.254456
    Studio
    Kloschuessel
    Schulhof


    so soll die liste aussehen
    --------------------------------------
    Schenk in Liste 1
    Schinken in Liste 1 und Liste 2
    Wurstbrot in Liste 1 und Liste 2
    Kaiser in Liste 1
    Klaus in Liste 1
    Hund in Liste 1
    Kuchen in Liste 1
    Elefant in Liste 1
    Plattenspieler in Liste 1
    CDLaufwerk in Liste 1
    Hunderennen in Liste 1
    Studio in allen Listen
    Kloschuessel in Liste 1 und Liste 3
    Karussel in Liste 2
    Schulhof in Liste 2 und Liste 3
    Arbeitsklima in Liste 2
    Tastatur in Liste 2
    Job in Liste 2
    Zeitarbeit in Liste 2
    Wilhelm in Liste 3
    Franz in Liste 3
    Ferdinand in Liste 3
    Oesterreich in Liste 3


    so sieht sie aus
    --------------------------------------
    Schenk in Liste 1
    Schinken in Liste 1 und Liste 2
    Wurstbrot in Liste 1 und Liste 2
    Kaiser in Liste 1
    Klaus in Liste 1
    Hund in Liste 1
    Kuchen in Liste 1
    Elefant in Liste 1
    Plattenspieler in Liste 1
    CDLaufwerk in Liste 1
    Hunderennen in Liste 1
    Studio in allen Listen
    Kloschuessel in Liste 1 und Liste 3
    Schinken in Liste 2 und Liste 1
    Karussel in Liste 2
    Schulhof in Liste 2 und Liste 3
    Arbeitsklima in Liste 2
    Studio in allen Listen
    Tastatur in Liste 2
    Job in Liste 2
    Zeitarbeit in Liste 2
    Wurstbrot in Liste 2 und Liste 1
    Wilhelm in Liste 3
    Franz in Liste 3
    Ferdinand in Liste 3
    Oesterreich in Liste 3
    Studio in allen Listen
    Kloschuessel in Liste 3 und Liste 1
    Schulhof in Liste 3 und Liste 2

  • Nur mal so als Frage. Wieso machste denn nicht aus den Funktionen _liste1 bis ...3, einfach eine, und arbeitest mit Arrays? Dann brauchst du die nicht includen.
    Und GUIGetMsg-Abfragen mit Switch-EndSwitch und nicht mit If-ElseIf-ElseIf-ElseIf-....

    Edit: So in etwa.

    Spoiler anzeigen
    [autoit]

    ; ----- Selbstverfasste Scripts -----
    #include <Vergleich.au3>

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

    Global $aList[4]
    Global $aListDesktop[3] = ["\list1.txt", "\list2.txt", "\list3.txt"]

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

    ; ----- Erstellen der GUI -----
    GUICreate("Datenabgleich", 500, 190, 75, 50)

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

    ; ----- Erstellen der Labels -----
    GUICtrlCreateLabel("Liste 1", 15, 10)
    GUICtrlCreateLabel("Liste 2", 15, 35)
    GUICtrlCreateLabel("Liste 3", 15, 60)
    GUICtrlCreateLabel("Output", 15, 100)

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

    ; ----- Erstellen der Textfelder -----
    $aList[0] = GUICtrlCreateInput("G:\Scripts\Datenvergleich\Quelldateien\liste1.txt" , 55, 6, 350, 20, $ES_READONLY + $ES_AUTOHSCROLL)
    $aList[1] = GUICtrlCreateInput("G:\Scripts\Datenvergleich\Quelldateien\liste2.txt", 55, 31, 350, 20, $ES_READONLY + $ES_AUTOHSCROLL)
    $aList[2] = GUICtrlCreateInput("G:\Scripts\Datenvergleich\Quelldateien\liste3.txt", 55, 56, 350, 20, $ES_READONLY + $ES_AUTOHSCROLL)
    $aList[3] = GUICtrlCreateInput(@DesktopDir & "\123.txt", 55, 96, 350, 20, $ES_READONLY + $ES_AUTOHSCROLL)

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

    ; ----- Erstellen der Browse-Buttons -----
    $browse1 = GUICtrlCreateButton("Durchsuchen", 410, 6, 75, 20)
    $browse2 = GUICtrlCreateButton("Durchsuchen", 410, 31, 75, 20)
    $browse3 = GUICtrlCreateButton("Durchsuchen", 410, 56, 75, 20)
    $browse4 = GUICtrlCreateButton("Durchsuchen", 410, 96, 75, 20)

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

    $clear = GUICtrlCreateButton("Alles Zurücksetzen", 15, 140, 235, 20)

    $comp = GUICtrlCreateButton("Vergleichen", 250, 140, 235, 20)

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

    $end = GUICtrlCreateButton("Beenden", 15, 165, 470, 20)

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

    GUISetState(@SW_SHOW)

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

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE, $end
    Exit
    Case $browse1
    $path1 = FileOpenDialog("Liste 1", @DesktopDir, "Alle Dateien (*.*)", 1)
    GUICtrlSetData($aList[0], $path1)
    Case $browse2
    $path2 = FileOpenDialog("Liste 2", @DesktopDir, "Alle Dateien (*.*)", 1)
    GUICtrlSetData($aList[1], $path2)
    Case $browse3
    $path3 = FileOpenDialog("Liste 3", @DesktopDir, "Alle Dateien (*.*)", 1)
    GUICtrlSetData($aList[2], $path3)
    Case $browse4
    $path4 = FileOpenDialog("Output", @DesktopDir, "Textdokumente (*.txt)", 8)
    GUICtrlSetData($aList[3], $path4)
    Case $clear
    GUICtrlSetData($aList[0], "")
    GUICtrlSetData($aList[1], "")
    GUICtrlSetData($aList[2], "")
    GUICtrlSetData($aList[3], "")
    Case $comp
    If GUICtrlRead($aList[3]) = "" Then
    MsgBox(0, "Fehler!", "Es wurde kein Outputpfad angegeben.")
    ElseIf GUICtrlRead($aList[0]) = "" Or GUICtrlRead($aList[1]) = "" Or GUICtrlRead($aList[2]) = "" Then
    MsgBox(0, "Fehler!", "Es wurden nicht alle Quellpfade angegeben!")
    Else
    GUICtrlSetState($comp, $GUI_DISABLE)

    ;~ _FileCreate(GuiCtrlRead($list4))
    $nice = FileOpen(GuiCtrlRead($aList[3]), 1)
    FileWriteLine($nice, "########################################################")
    FileClose($nice)

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

    Sleep(500)

    _listen()

    Sleep(500)

    For $i = 0 To 2
    _vergleich("list1", "list2", "list3", GUICtrlRead($aList[3]), $i)
    Next

    ;~ FileDelete(@DesktopDir & "\*.elefant")

    GUICtrlSetState($comp, $GUI_ENABLE)
    EndIf
    EndSwitch
    WEnd

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

    ; ----- Listen auslesen -----

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

    Func _listen()
    For $i = 0 To 2
    $f_list = FileOpen(GUICtrlRead($aList[$i]), 0)

    If $f_list = -1 Then
    MsgBox(0, "Fehler", "Datei konnte nicht geöffnet werden.")
    Return
    EndIf

    $count_list = _FileCountLines(GUICtrlRead($aList[$i]))
    $write = FileOpen(@DesktopDir & $aListDesktop[$i], 1)
    For $k = 1 To $count_list
    $l_list = FileReadLine($f_list, $k)
    $split = StringSplit($l_list, ".")
    FileWriteLine($write, $split[1])
    Next
    FileClose($write)
    Next
    EndFunc

    [/autoit]

    Wieso erstellst du eigentlich noch extra 3 Listen?

    4 Mal editiert, zuletzt von m-obi (13. April 2010 um 09:24)

  • Hallo, mal auf die schnelle ein Beispiel, wie man die Wortliste entschlacken könnte, statt Arrays bieten sich in einem "Wörterbuch" aber auch die sehr schnellen

    [autoit]

    $obj = ObjCreate("System.Collections.ArrayList") ;oder
    $oDictionary = ObjCreate('Scripting.Dictionary')

    [/autoit]

    -Funktionen an

    Spoiler anzeigen
    [autoit]

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

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

    $ausgabedatei = "Ausgabe_test.txt"
    FileDelete($ausgabedatei) ;zum test löschen
    $datei_inhalt = ""
    Dim $array_inhalt

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

    For $i = 1 To 100 ;ein zufälliger dateiinhalt wird erstellt
    $datei_inhalt &= "wort" & Random(1, 5, 1) & @TAB & "---> Liste Wort enthalten in Datei" & Random(1, 2, 1) & " und Datei" & Random(3, 4, 1) & @CRLF
    $datei_inhalt &= "wort" & Random(1, 5, 1) & @TAB & "---> Liste Wort enthalten in Datei" & Random(3, 4, 1) & " und Datei" & Random(1, 2, 1) & @CRLF
    Next
    $datei_inhalt &= "wort" & Random(7, 8, 1) & @TAB & "---> Liste Wort enthalten in Datei" & Random(3, 4, 1) & " und Datei" & Random(1, 2, 1) & @CRLF
    FileWrite($ausgabedatei, $datei_inhalt) ; dateiinhalt in datei schreiben
    MsgBox(262144, 'Debug line ~' & @ScriptLineNumber, 'Selection:' & @LF & '$datei_inhalt' & @LF & @LF & 'Return:' & @LF & $datei_inhalt) ;### Debug MSGBOX

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

    $split = _FileReadToArray($ausgabedatei, $array_inhalt) ;dateiinhalt in ein array
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $split = ' & $split & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console

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

    _ArrayDisplay($array_inhalt, "Dateiinhalt")

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

    _ArraySort($array_inhalt) ;sortieren
    _ArrayDisplay($array_inhalt, "sortiert")

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

    $auswertung = _ArrayUnique($array_inhalt, 1, 1) ;mehrfache wörter eliminieren
    _ArrayDisplay($auswertung, "Unique")

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

    ;nun die doppelt vorkommenden Hinweise im Text reduzieren, "wort1 in Datei1 und Datei2"<>"wort1 in Datei2 und Datei1"
    $i = 0
    Do
    $i += 1 ;nächstes wort
    Do
    $split_1 = StringSplit($auswertung[$i], @TAB) ;zeile splitten
    $split_2 = StringSplit($auswertung[$i + 1], @TAB) ;nächste zeile splitten
    If $split_1[1] = $split_2[1] Then _ArrayDelete($auswertung, $i + 1) ;falls beide wörter gleich sind, zeile eliminieren
    Until $split_1[1] <> $split_2[1] Or $i + 1 = UBound($auswertung)-1 ;solange, bis es keine doppelten wörter gibt, oder das ende der liste erreicht ist
    Until $i + 1 = UBound($auswertung)-1 ;solange, bis das ende der liste erreicht ist

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

    _ArrayDisplay($auswertung, "Auswertung abgeschlossen")
    FileDelete($ausgabedatei) ;zum test löschen

    [/autoit]
  • vielen vielen dank =D :thumbup:
    von der funktionsweise ist das genau das was ich gesucht habe.

    hab das jetzt als funktion geschrieben und an mein script angepasst.. aber ich bekomm die ganze zeit die fehlermeldung

    Code
    ==> Subscript used with non-Array variable.:
    $split_1 = StringSplit($auswertung[$i], @TAB)
    $split_1 = StringSplit($auswertung^ ERROR

    ich hab wahrscheinlich irgendwas mit meiner funktion falsch.. wenn du da mal kurz drüber schauen könntest wär echt nice
    hab hauptsächlich von deinem vorschlag kopiert :whistling:

    Spoiler anzeigen
    [autoit]

    Func _FileEinlesen($target)
    ;~ MsgBox(0, "", $target)
    Dim $array_content
    _FileReadToArray($target, $array_content)
    _ArraySort($array_content)
    $auswertung = _ArrayUnique($array_content, 1, 1)

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

    $i = 0
    Do
    $i += 1
    Do
    $split_1 = StringSplit($auswertung[$i], @TAB)
    $split_2 = StringSplit($auswertung[$i + 1], @TAB)
    If $split_1[1] = $split_2[1] Then _ArrayDelete($auswertung, $i + 1)
    Until $split_1[1] <> $split_2[1] Or $i + 1 = UBound($auswertung)-1
    Until $i + 1 = UBound($auswertung)-1
    EndFunc

    [/autoit]
  • Hi, nur weil ich nicht auf @error teste heisst das nicht, daß du das auch so machen musst! :D

    Spoiler anzeigen
    [autoit]

    #include <File.au3>
    #include <Array.au3>
    $file = "ausgabe.txt"
    $a = _fileEinlesen($file)
    _ArrayDisplay($a)

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

    Func _FileEinlesen($target)
    ;~ MsgBox(0, "", $target)
    Dim $array_content
    $a = _FileReadToArray($target, $array_content)
    If @error Then
    MsgBox(0, "Fehler im Modul _FileEinlesen()", "Datei " & $target & " kann nicht gelesen werden!")
    Return SetError(1, 0, 0)
    EndIf
    ;ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : UBound($array_content) = ' & UBound($array_content) & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
    if UBound($array_content) <= 2 then return $array_content ;wenn nur ein element
    ; _arraydisplay($array_content)
    _ArraySort($array_content)
    $auswertung = _ArrayUnique($array_content, 1, 1)

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

    $i = 0
    Do
    $i += 1
    Do
    $split_1 = StringSplit($auswertung[$i], @TAB)
    $split_2 = StringSplit($auswertung[$i + 1], @TAB)
    If $split_1[1] = $split_2[1] Then _ArrayDelete($auswertung, $i + 1)
    ; _arraydisplay($auswertung,$i&" "&UBound($auswertung))
    Until $split_1[1] <> $split_2[1] Or $i + 1 = UBound($auswertung) - 1
    Until $i + 1 = UBound($auswertung) - 1
    Return $auswertung
    EndFunc ;==>_FileEinlesen

    [/autoit]

    Btw gehören noch wesentlich mehr @error-Abfragen in dein Script! Dann finden sich diese "Fehler" nämlich von selbst ^^

  • :D @error wär ne option

    aber ich habs jetzt auch soweit hinbekommen dass es funktioniert.. jetzt muss ich nur noch überprüfen ob auch alle namen noch drinstehen xD

    vielen vielen dank nochmal an euch =)
    ich wusst doch dass ihr mir helfen könnt
    :thumbup: :thumbup: