1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. Jensen..

Beiträge von Jensen..

  • Patcher Entwicklung

    • Jensen..
    • 15. September 2014 um 13:36

    Hallo,
    ich weiß das dieses Thema schon älter ist, jedoch habe ich genau sowas gesucht.

    Hier nun meine Frage:

    Das Skript, so wie es hier von Progandy geschrieben ist funktioniert bei mir lokal mit einem xampp Server problemlos.
    Alle Verzeichnisse und Dateien werden problemlos "gepatcht" wenn veränderungen an diesen vorliegen.
    Jetzt aber wollte ich das ganze mit IIS 7.5 testen und er lädt nur die Verzeichnisse herrunter und keine Dateien ;(
    Den "mime-typ" habe ich für jeden Dateityp angepasst und es läßt sich auch anhand der url im Browser runterladen.
    Was müßte ich ändern, das es auch unter IIS 7.5 funktioniert?

  • doppler in mehreren csv Dateien

    • Jensen..
    • 6. August 2014 um 17:10

    ***perfekt Oscar und super schnell ist es auch noch***

    und mit deinem Listview Datenbank Beispiel kombiniert ergibt das nun eine kleine aber effektive Auftragsverwaltung.

    DANKE :thumbup:

  • doppler in mehreren csv Dateien

    • Jensen..
    • 6. August 2014 um 14:54

    Hallo,
    ich habe mal wieder ein kleines "doppler Problem".
    Mal sehen ob ich es gut beschreiben kann, also:

    Es gibt drei .csv Dateien (Listentrennzeichen "|")

    auftrag.csv
    protokoll.csv (>20.000 Zeilen)
    neuauftrag.csv

    In der ersten "Spalte" einer jeden .csv Datei gibt es eine eindeutige Auftr.Nr die als Kriterium für eine doppelte Zeile
    verwendet werden soll.
    Ist also die erste Zahl vor der ersten Trennung mit "|" gleich, dann handelt es sich um einen "doppler", egal was danach in der Zeile steht.

    Hier mal ein Beispiel wie die .csv Dateien aufgebaut sind.

    auftrag.csv

    Code
    4444|ac|bbb|ccc|ddd|eee|fff|ggg|hhh|iii|
    5555|aaa|bbb|ccc|ddd|eee|fff|ggg|hhh|iii|
    6666|aca|bbb|ccc|ddd|eee|fff|ggg|hhh|iii|

    protokoll.csv

    Code
    1111|ac|bbb|ccc|ddd|eee|fff|ggg|hhh|iii|
    2222|aca|bbb|ccc|ddd|eee|fff|ggg|hhh|iii|
    3333|aaa|bbb|ccc|ddd|eee|fff|ggg|hhh|iii|

    neuauftrag.csv

    Code
    1111|aaa|bbb|ccc|ddd|eee|fff|ggg|hhh|iii|
    7777|aca|bbb|ccc|ddd|eee|fff|ggg|hhh|iii|
    8888|aaa|bbb|ccc|ddd|eee|fff|ggg|hhh|iii|
    9999|aca|bbb|ccc|ddd|eee|fff|ggg|hhh|iii|

    Jetzt soll folgendes Untersucht und in einer ergebnis.csv gespeichert werden:

    Wenn Auftr.Nr von (neuauftrag.csv) in: auftrag.csv & protokoll.csv vorhanden, dann nicht in ergebnis.csv eintragen, anders eintragen.

    In meinem Beispiel müßte die ergebnis.csv also so aussehen:

    ergebnis.csv

    Code
    7777|aca|bbb|ccc|ddd|eee|fff|ggg|hhh|iii|
    8888|aaa|bbb|ccc|ddd|eee|fff|ggg|hhh|iii|
    9999|aca|bbb|ccc|ddd|eee|fff|ggg|hhh|iii|

    Vielleicht kann mir ja jemand dabei helfen?

  • Inhalt von 2 Dateien zusammen führen, nach Duplikaten suchen und löschen

    • Jensen..
    • 24. Juli 2014 um 20:35

    Ich habe es mal mit _ArrayUnique getestet, er löscht zwar bis auf eine Zeile alle doppelten, jedoch benutzt diese Funktion den gesamten Datensatz um einen Vergleich zu machen.
    Ich möchte aber das er Datensätze löscht die in der ersten "Spalte" gleich sind.

    Hier das Script mit _ArrayUnique

    Spoiler anzeigen
    [autoit]

    #include <array.au3>
    #include <file.au3>
    Global $file= @ScriptDir & "\test.csv"

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

    _deldoppler()

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

    Func _deldoppler()
    Dim $adata
    _FileReadToArray($file, $adata)
    _ArrayDisplay($adata)
    $aNewArray = _ArrayUnique($adata)
    _ArrayDisplay($aNewArray)
    ;_FileWriteFromArray($file, $aNewArray, 2)
    FileClose($file)
    EndFunc

    [/autoit]

    So sah die test.csv vor den umwandeln aus:

    Code
    1111|aaa|bbb|ccc|ddd|eee|fff|ggg|hhh|iii|jjj
    1111|aca|bbb|ccc|ddd|eee|fff|ggg|hhh|iii|jjj
    2222|aaa|bbb|ccc|ddd|eee|fff|ggg|hhh|iii|jjj
    2222|aca|bbb|ccc|ddd|eee|fff|ggg|hhh|iii|jjj
    2222|aca|bbb|ccc|ddd|eee|fff|ggg|hhh|iii|jjj

    danach so:

    Code
    1111|aaa|bbb|ccc|ddd|eee|fff|ggg|hhh|iii|jjj
    1111|aca|bbb|ccc|ddd|eee|fff|ggg|hhh|iii|jjj
    2222|aaa|bbb|ccc|ddd|eee|fff|ggg|hhh|iii|jjj
    2222|aca|bbb|ccc|ddd|eee|fff|ggg|hhh|iii|jjj

    so sollte sie aber aussehen:

    Code
    1111|aaa|bbb|ccc|ddd|eee|fff|ggg|hhh|iii|jjj
    2222|aaa|bbb|ccc|ddd|eee|fff|ggg|hhh|iii|jjj


    EDIT:
    Ich habe jetzt versucht das "Dictionary" Script von AspirinJunkie für meine Bedürfnisse anzupassen, für meine kleine test.csv funktioniert das nun.
    Aber vielleicht kann ja nochmal jemand drüber schauen ob das so auch vernünftig ist.

    Spoiler anzeigen
    [autoit]

    #include <array.au3>
    #include <file.au3>
    Global $sFile= @ScriptDir & "\test.csv"
    Global $sFile_out= @ScriptDir & "\fertig.csv"

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

    _dopplerfinden()

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

    Func _dopplerfinden()
    Global $dic_CSV1 = ObjCreate("Scripting.Dictionary") ; Ein Dictionary als Zwischenspeicher da es sich schneller durchsuchen lässt als ein Array
    Global $s_Key, $s_Out = "" ; $s_Out = zu schreibendes Endergebnis
    Const $s_CSV1 = $sFile ;test.csv"
    Const $s_CSVOut = $sFile_out ;ergebnis.csv"

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

    For $s_Line In FileReadToArray($s_CSV1) ; erste Datei zeilenweise durchgehen
    $s_Key = StringLeft($s_Line, StringInStr($s_Line, "|")) ; erste Spalte auslesen
    $dic_CSV1($s_Key) = $s_Line ; erste Spalte als Key und ganze Zeile als Value in das Dictionary eintragen

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

    Next

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

    If $dic_CSV1.Exists($s_Key) Then ; Check ob der erste "Spaltenwert" in der CSV vorhanden war
    $dic_CSV1.Remove($s_Key) ; Falls ja diesen Wert aus Dictionary löschen

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

    EndIf
    $s_Out &= $s_Line & @CRLF ; Zeile zu $s_Out hinzufügen

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

    For $s_Key in $dic_CSV1.Keys() ; Alle Keys des Dictionarys durchgehen
    $s_Out &= $dic_CSV1($s_Key) & @CRLF ; Die mit den Keys verknüpften Daten (=die Zeilen) $s_Out ebenfalls noch hinzufügen
    Next

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

    ; $s_Out in Datei schreiben:
    FileDelete($s_CSVOut)
    FileDelete($sFile)
    FileWrite($sFile, StringTrimRight($s_Out, 2)) ; StringTrimRight um letztes unnötiges @CRLF zu entfernen

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

    EndFunc

    [/autoit]
  • Inhalt von 2 Dateien zusammen führen, nach Duplikaten suchen und löschen

    • Jensen..
    • 24. Juli 2014 um 19:57

    löscht er dann nicht alle Datensätze mit "_ArrayUnique"?, ich wollte gerne einen von den "doppelten" behalten.

  • Inhalt von 2 Dateien zusammen führen, nach Duplikaten suchen und löschen

    • Jensen..
    • 24. Juli 2014 um 19:22

    Hallo und danke für die schnelle Antwort,

    leider bekomme ich einen Fehler: EDIT: (eben gesehen das dieser Fehler mit der verwendeten AutoIt-Version kommt, ich habe v3.3.10.2)

    Code
    (25) : ==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.:
    if $2DData[$i][0]=$2DData[$j][0] then
    if ^ ERROR

    hier das Script, nur ein wenig angepasst.

    Spoiler anzeigen
    [autoit]

    #include <array.au3>
    #include <file.au3>
    $file= @ScriptDir & "test.csv" ;FileOpenDialog("",@DesktopDir,"All (*.*)")
    local $data[1]
    _FileReadToArray($file,$data,0)
    local $2DData[UBound($data)][4]
    for $i=0 to UBound($data)-1 step 1
    $ar=StringSplit($data[$i],"|")
    $2DData[$i][0]=$ar[1]
    $2DData[$i][1]=$ar[2]
    $2DData[$i][2]=$ar[3]
    $2DData[$i][3]=$ar[4]
    ;~ $2DData[$i][4]=$ar[5]
    ;~ $2DData[$i][5]=$ar[6]
    ;~ $2DData[$i][6]=$ar[7]
    ;~ $2DData[$i][7]=$ar[8]
    ;~ $2DData[$i][8]=$ar[9]
    next
    $meToo=false
    $end=UBound($2DData)-1
    for $i=0 to $end step 1
    ConsoleWrite("Outer:"&$i&" "&$end&@crlf)
    for $j=0 to $i-1 step 1
    ConsoleWrite("Inner:"&$i&" "&$j&@crlf)
    if $2DData[$i][0]=$2DData[$j][0] then
    _ArrayDelete($2DData,$i)
    $end=$end-1
    if $i+1=$end or $i=$end then
    ExitLoop 2
    endif
    ExitLoop
    endif
    next
    next
    $string=""
    for $i=0 to UBound($2DData)-1 step 1
    $string&=$2DData[$i][0]&"|"&$2DData[$i][1]&"|"&$2DData[$i][2]&"|"&$2DData[$i][3]&"|"&@crlf ;$2DData[$i][4]&"|"&$2DData[$i][5]&"|"&$2DData[$i][6]&"|"&$2DData[$i][7]&"|"&$2DData[$i][8]&"|"&@crlf
    Next
    $fileHandle=FileOpen($file,2)
    FileWrite($fileHandle,$string)
    FileClose($fileHandle)
    exit

    [/autoit]

    Dann nochwas, die test.csv kann bis zu 8000 Zeilen umfassen, vielleicht wäre auch diese "Scripting.Dictionary" Variante möglich wie sie AspirinJunkie hier schon gepostet hatte, die müßte man noch anpassen so das sie halt nur eine Datei untersucht und auch einen "doppler" stehen läßt? Leider bin ich dazu noch nicht in der Lage.

    Ich hatte meine test.csv auch ein wenig falsch beschrieben:
    Diese hat max. 9 Trennzeichen( | ) und kann wie gesagt über ein paar tausend Zeilen groß sein.

    EDIT: eben gesehen das dieser Fehler mit der verwendeten AutoIt-Version kommen soll, ich habe v3.3.10.2
    Ein update wollte ich noch nicht machen weil sonst einige Excel-UDF nicht mehr gehen.

  • Inhalt von 2 Dateien zusammen führen, nach Duplikaten suchen und löschen

    • Jensen..
    • 24. Juli 2014 um 17:28

    Hallo,
    ich hänge mich mal mit hierein da mein Problem ähnlich ist.

    Als erstes muß ich eine .csv Datei (getrennt durch " | ") aufräumen, dazu möchte ich die doppler finden aber einen von den "dopplern" will ich behalten, welchen von den ist erstmal egal.
    Die .csv Datei ist wie bei meinen Vorgänger hier ebenso aufgebaut und ich habe auch die erste Spalte als Suchkriterium.

    Hier mal das gewünschte Ergebnis:

    test.csv --- Ausgangssituation

    Code
    1111|aa|bb|cc|
    2222|as|wd|34|
    1111|ab|bb|cd|
    3333|rt|er|io|

    test.csv --- nach entfernen der doppler

    Code
    1111|aa|bb|cc|
    2222|as|wd|34|
    3333|rt|er|io|

    Vielleicht kann mir hier einer auf die Sprünge helfen?

  • listview mehrfachauswahl verhindern

    • Jensen..
    • 27. April 2014 um 19:01

    Danke für die Info,
    hatte ein fertiges Datenbankscript von jemanden hier verwendet wo diese Option wohl noch an war....Sorry

    [autoit]

    $LVS_SHOWSELALWAYS

    [/autoit]
  • listview mehrfachauswahl verhindern

    • Jensen..
    • 27. April 2014 um 18:08

    Hallo,
    kann mir einer sagen wie man die Mehrfachauswahl in einer Listview verhindern kann?

  • bestimmte Zeilen löschen

    • Jensen..
    • 26. April 2014 um 13:53

    Hi,
    Kanashius: ich hatte noch probleme mit diesen Teil weil er die Funktion nicht kannte bei mir.

    [autoit]

    $aContent=FileReadToArray($sFile3)

    [/autoit]

    habe das wieder geändert in:

    [autoit]

    _FileReadToArray($sFile3, $aContent)

    [/autoit]

    und jetzt funktioniert alles wie gewollt, vielen Dank nochmal für deine Hilfe.

    Friesel
    Auch dir ein Danke für deine Hilfe, ich habe das auch gleich mal getestet und werde es für einen anderen Part im Programm sehr gut gebrauchen können.

  • bestimmte Zeilen löschen

    • Jensen..
    • 25. April 2014 um 17:30

    Hallo Kanashius,
    erstmal Danke für deine Hilfe.
    Ich habe das mal gleich getestet, jedoch verändert sich nichts im File2.
    Hier mal der komplette Code den ich verwendet habe:

    [autoit]

    #include <array.au3>
    #include <File.au3>

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

    Dim $aContent
    Dim $sData

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

    $sFile2 = @ScriptDir & "\file2.csv"
    $sFile3 = @ScriptDir & "\protokoll.csv"

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

    _deltest()

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

    Func _deltest()
    If Not _FileReadToArray($sFile2, $aContent) Then
    MsgBox(0, "Achtung", "Datei konnte nicht eingelesen werden!")
    Exit
    EndIf
    _FileReadToArray($sFile3, $aContent) ; protokoll.csv einlesen im Array

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

    _ArrayDisplay($aContent) ; Array anzeigen

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

    $sData = FileRead($sFile2)
    ;MsgBox(0, "", $sData)
    For $i = 0 To UBound($aContent) - 1 Step 1
    StringReplace($sData, $aContent[$i], "")

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

    Next
    FileDelete($sFile2)
    FileWrite($sFile2, $sData)

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

    FileClose($sFile2)

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

    EndFunc ;==>_deltest

    [/autoit]

    Die .csv Files sind folgend aufgebaut:

    protokoll.csv

    Code
    1
    2

    file2.csv

    Code
    1
    2
    3
    4
    5

    Jetzt sollen die Sachen was in der protokoll.csv stehen aus der file2.csv herrausgelöscht werden.
    Das heißt, am ende sollte die file2.csv so aussehen:
    file2.csv

    Code
    2
    3
    4
    5
  • bestimmte Zeilen löschen

    • Jensen..
    • 25. April 2014 um 04:52

    Hallo,
    habe hier ein kleines Problem mit den löschen in meinen .csv Dateien.

    Ich habe 3 .csv Dateien

    [autoit]

    $sFile1 = @ScriptDir & "\1.csv"
    $sFile2 = @ScriptDir & "\2.csv"
    $sFile3 = @ScriptDir & "\protokoll.csv"

    [/autoit]

    Die Daten von File1 kommen aus einer Exceltabelle
    Die Daten für File2 kommen aus File1

    [autoit]

    FileWrite($sFile2, FileRead($sFile1) & @CRLF & FileRead($sFile2))

    [/autoit]


    File2 wird über ein Listview geladen und es können einzelne Datensätze gelöscht werden.
    Doch bevor diese gelöscht werden, kommen sie ins Protokoll (File3).

    Da es häufig vorkommt, dass in der Exceltabelle noch Datensätze drinn sind die schon "durch File1 gelaufen" sind, bekommme ich dann natürlich die Datensätze wieder doppelt, was aber nicht gewollt ist.
    Für die "doppler" habe ich schon hier im Forum was funktionierendes eingebaut.

    Jetzt suche ich was um die Datensätze die im Protokoll(File3) stehen mit den aus File2 zu vergleichen und wenn gleiche Datensätze vorhanden, sollen diese komplett, also alle gelöscht werden im File2.

    Mein Ansatzt ist bisher, dass ich das Protokoll(File3) mit:

    [autoit]

    _FileReadToArray($sFile3, $aContent)

    [/autoit]

    in ein Array packe,
    Die Ausgabe mit:

    [autoit]

    _ArrayDisplay($aContent, 0)

    [/autoit]


    klappt auch, nur wie bekomme ich jetzt die Sachen die im Array sind, jetzt als Index für die Löschfunktion im File2.

    Oder besser gefragt, die Sachen die im Protokoll(File3) stehen, sollen und dürfen nicht mehr im File2 sein weil die ja schon "abgehandelt" sind und das bekomme ich nicht hin.

    Ich hoffe ich konnte mich irgendwie verständlich ausdrücken

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™