datei auslesen

  • könnte mir einer ein codensnippet geben das von einer *.txt datei jede zeile ausliest (es sind urls) die ich dann automatisch besuchen lassen kann?

    geht das auch das ich identische zeilen löschen lassen kann?

    Einmal editiert, zuletzt von Health (5. November 2006 um 07:18)

  • Spoiler anzeigen
    [autoit]


    #include <IE.au3>
    #include <file.au3>

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

    If FileExists(@ScriptDIR&"\urls.txt") Then
    Dim $inhalt
    If Not _FileReadToArray(@ScriptDir&"\urls.txt",$inhalt) Then
    MsgBox(4096,"Error", "Es ist ein Fehler aufgetreten!"&@CR&"Bitte kontaktieren Sie den Author.")
    Exit
    EndIf
    $fo_urls = FileOpen(@ScriptDir&"\urls.txt",2)
    For $i = 1 to $inhalt[0]
    If $inhalt[$i] = "" Then
    ;Eintrag in zeile leer
    Else
    _IECreate($inhalt[$i])
    EndIf
    Next
    EndIf

    [/autoit]


    zurzeit wird noch für jeden eintrag der in der txt vorhanden ist ein neues fenster erstellt mit der url die in der txt steht aber hab das noch nicht wirklich zum funktionieren bekommen dass er vorher noch prüft ob der eintrag schon vorhanden ist...
    achja die txt datei liegt laut scrip nätürlich im gleichen verzeichnis wie das script und heißt urls.txt(sehr kreativ^^)

  • ok danke, hab das jetzt soweit, jetzt bräucht ich nur noch ein "tool" das mir die doppelten zeilen erkennt und automatisch löscht :musik1:

    • Offizieller Beitrag

    Hi,

    versuch mal :

    [autoit]

    #include <file.au3>
    #include <Array.au3>
    Dim $aLines

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

    If Not _FileReadToArray("duplicate.txt", $aLines) Then
    MsgBox(4096, "Error", " Error reading log to Array error:" & @error)
    Exit
    EndIf

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

    Global $array = RemoveDuplicates($aLines)
    _ArrayDisplay($array, "Removed Duplicates")

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

    Func RemoveDuplicates($avData)
    Local $avData2 = $avData
    Local $iCount = 0
    For $i = 0 To UBound($avData) - 1
    $iCount = 0
    For $ii = 0 To UBound($avData) - 1
    If $ii > UBound($avData2) - 1 Then ExitLoop
    If $avData2[$ii] = $avData[$i] Then
    If $iCount > 0 Then
    _ArrayDelete($avData2, $ii)
    _ArrayDelete($avData2, $i)
    EndIf
    $iCount += 1
    EndIf
    Next
    Next
    $avData2[0] = UBound($avData2)
    Return $avData2
    EndFunc ;==>RemoveDuplicates

    [/autoit]

    So long,

    Mega

  • Spoiler anzeigen


    @edit vom zitat einfach spoiler hinzugefügt...


    hey ho mega hab grad deine funktion getest.ich denke das funktioniert nicht ganz, da wenn ein eintrag doppelt vorkommt, werden ->beide<- einträge gelöscht...ich denke mal das ist nicht erwünscht(weiß ich aber auch nicht^^)...deswegen zeile 23 auskommentieren..dann wird nur einer der beiden doppelt vorkommenden einträge gelöscht...des ganze dann noch mit IE öffnen(mit der schleife von mir wär das eine möglichkeit) aber sonst funktioniert die funktion (getestet)
    :keks: an mega ;) ders gelößt hat hihi
    @edit2 satzzeichen hinzugefügt^^ damit halbwegslesbar mit kater :rofl:

  • ah super :klatschen:

    ich bekomms jetzt bloß nicht in eine datei geschrieben :|

    edit: snoozer, ööh es sind aber auch welche dreifach und mehr, geht das trotzdem?

    Einmal editiert, zuletzt von Health (5. November 2006 um 12:37)

  • bei 150kb textdatei dauert das bald 10 minuten, kann man das nicht irgendwie optimieren? ich hab nen pentium d 3ghz

  • [autoit]

    #include <file.au3>
    #include <Array.au3>

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

    Dim $aLines

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

    If Not _FileReadToArray ("url.txt", $aLines) Then
    MsgBox(4096, "Error", " Error reading log to Array error:" & @error)
    Exit
    EndIf

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

    Global $array = RemoveDuplicates ($aLines)

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

    _FileWriteFromArray ("output.txt", $array)

    Func RemoveDuplicates($avData)
    Local $avData2 = $avData
    Local $iCount = 0
    For $i = 0 To UBound($avData) - 1
    $iCount = 0
    For $ii = 0 To UBound($avData) - 1
    If $ii > UBound($avData2) - 1 Then ExitLoop
    If $avData2[$ii] = $avData[$i] Then
    If $iCount > 0 Then
    _ArrayDelete($avData2, $ii)
    ;_ArrayDelete($avData2, $i)
    EndIf
    $iCount += 1
    EndIf
    Next
    Next
    $avData2[0] = UBound($avData2)
    Return $avData2
    EndFunc ;==>RemoveDuplicates

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

    ;########

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

    ; _FileCountLines("output.txt")

    [/autoit]
    • Offizieller Beitrag

    Hallo!

    probier mal das:

    Spoiler anzeigen
    [autoit]

    #include <file.au3>
    #include <Array.au3>

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

    Dim $aLines

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

    If Not _FileReadToArray("url.txt", $aLines) Then
    MsgBox(4096, "Error", " Error reading log to Array error:" & @error)
    Exit
    EndIf

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

    $array = _ArrayDelDup($aLines, 1)

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

    _FileWriteFromArray("output.txt", $array, 1)

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

    ;===============================================================================
    ;
    ; Function Name: _ArrayDelDup()
    ; Description: Remove multiple entries.
    ; Parameter(s): $a_Array - Array
    ; $i_Base - Start at this Array entry.
    ; Requirement(s): None
    ; Return Value(s): On Success - new Array
    ; On Failure - "" and sets @ERROR = 1
    ;
    ;===============================================================================
    Func _ArrayDelDup($a_Array, $i_Base = 0)
    Local $i_Count, $i_MaxCount

    If Not IsArray($a_Array) Then
    SetError(1)
    Return ""
    EndIf

    Dim $a_newArray[2]
    $a_newArray[1] = $a_Array[$i_Base]

    For $i = $i_Base + 1 To UBound($a_Array) - $i_Base - 1
    If _ArraySearch($a_newArray, $a_Array[$i]) = -1 Then
    _ArrayAdd($a_newArray, $a_Array[$i])
    EndIf
    Next

    $a_newArray[0] = UBound($a_newArray) - 1
    Return $a_newArray
    EndFunc ;==>_ArrayDelDup

    [/autoit]
  • genauso langsam wie vorher :weinen:

    ich benutz aber das jetzt erstmal

    naja muss ich halt warten... ich test es nachher mal auf nem anderen rechner

    • Offizieller Beitrag

    Vllt. gehts so schneller, allerdings werden die Url's jetzt sortiert aber das dürfte ja nichts machen:

    Spoiler anzeigen
    [autoit]

    #include <file.au3>
    #include <Array.au3>

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

    Dim $aLines

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

    If Not _FileReadToArray("url.txt", $aLines) Then
    MsgBox(4096, "Error", " Error reading log to Array error:" & @error)
    Exit
    EndIf

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

    $array = _ArrayDelDup($aLines, 1)

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

    _FileWriteFromArray("output.txt", $array, 1)

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

    ;===============================================================================
    ;
    ; Function Name: _ArrayDelDup()
    ; Description: Remove multiple entries.
    ; Parameter(s): $a_Array - Array
    ; $i_Base - Start sorting at this Array entry.
    ; Requirement(s): None
    ; Return Value(s): On Success - new Array
    ; On Failure - "" and sets @ERROR = 1
    ;
    ;===============================================================================
    Func _ArrayDelDup($a_Array, $i_Base = 0)
    Local $i_Count, $i_MaxCount

    If Not IsArray($a_Array) Then
    SetError(1)
    Return ""
    EndIf

    _ArraySort($a_Array,0,$i_Base)

    Dim $a_newArray[2]
    $a_newArray[1] = $a_Array[$i_Base]

    For $i = $i_Base + 1 To UBound($a_Array) - $i_Base - 1
    If $a_Array[$i -1] <> $a_Array[$i] Then
    _ArrayAdd($a_newArray, $a_Array[$i])
    EndIf
    Next

    $a_newArray[0] = UBound($a_newArray) - 1
    Return $a_newArray
    EndFunc ;==>_ArrayDelDup

    [/autoit]

    Wenn's jetzt immer noch genau so langsam ist liegt's wohl eher an _FileReadToArray und _FileWriteFromArray!