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. Scritch

Beiträge von Scritch

  • .csv-Datei in Array

    • Scritch
    • 11. Oktober 2010 um 13:09

    Hier mal ein Beispiel.

    Dateien

    beispiel.zip 230 Byte – 269 Downloads
  • .csv-Datei in Array

    • Scritch
    • 11. Oktober 2010 um 12:32

    Hallo,

    ich wollte gerne eine CSV-Datei in ein Array einlesen.
    Dazu habe ich dies hier gefunden:

    Spoiler anzeigen
    [autoit]

    #include <array.au3>
    Main()

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

    Func Main()
    Local $sAdr = "C:\\test.csv"
    Local $h = FileOpen($sAdr, 0)

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

    Local $aRet = _CSV2Array($h, Default, True, 1)

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

    FileClose($h)
    _ArrayDisplay($aRet)

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

    EndFunc ;==>Main

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

    ; #FUNCTION# ===================================================================
    ; Name ..........: _CSV2Array
    ; Description ...:
    ; AutoIt Version : V3.3.0.0
    ; Syntax ........: _CSV2Array($hFile[, $cSeperator = "auto"[, $bFilterString = True[, $iColumnMode = 0]]])
    ; Parameter(s): .: $hFile - Handle for the CSV file to Read
    ; $cSeperator - Optional: (Default = "auto") : Tries to find the separator char ;) or , or TAB or | or space)
    ; | Data-seperator-char
    ; | Empty-string = Opt("GUIDataSeparatorChar")
    ; $bFilterString - Optional: (Default = True) : Removes leading and trailing " or '
    ; $iColumnMode - Optional: (Default = 0) :
    ; | 0: Sets error if lines have different columns and @extended to the csv-line number
    ; | 1: returns lines with different columns numbers comparing to the first line, too
    ; | 2: removing all columns > column numbers in the first line
    ; Return Value ..: Success - 2-dim Array
    ; Failure - 0
    ; @ERROR - 1: error file read
    ; @ERROR - 2: different number of columns / @EXTENDED = CSV-line
    ; - 3: parameter error
    ; Author(s) .....: Thorsten Willert
    ; Date ..........: Mon Dec 07 18:54:35 CET 2009
    ; ==============================================================================
    Func _CSV2Array($hFile, $cSeperator = "auto", $bFilterString = True, $iColumnMode = 0)
    Local $s = FileRead($hFile)
    If @error Then Return SetError(1)

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

    If $cSeperator = Default Then $cSeperator = "auto"
    If Not $cSeperator Then $cSeperator = Opt("GUIDataSeparatorChar")

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

    ; searching the line-seperator and splitting the lines into an array
    Local $aLines
    If StringInStr($s, @CRLF) Then
    $aLines = StringSplit($s, @CRLF, 1)
    ElseIf StringInStr($s, @CR) Then
    $aLines = StringSplit($s, @CR)
    Else
    $aLines = StringSplit($s, @LF)
    EndIf

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

    ; searching the delimiter in the first line
    Local $aTMP
    If $cSeperator = "auto" Then
    Local $iMax = 0
    Local $iC[5] = [0, 0, 0, 0, 0]
    Local $sC[5] = [";", ",", @TAB, "|", " "]

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

    $aTMP = StringRegExp($aLines[1], ";", 3)
    If Not @error Then $iC[0] = UBound($aTMP)
    $aTMP = StringRegExp($aLines[1], ",", 3)
    If Not @error Then $iC[1] = UBound($aTMP)
    $aTMP = StringRegExp($aLines[1], "\t", 3)
    If Not @error Then $iC[2] = UBound($aTMP)
    $aTMP = StringRegExp($aLines[1], "\|", 3)
    If Not @error Then $iC[3] = UBound($aTMP)
    $aTMP = StringRegExp($aLines[1], "[ ]", 3)
    If Not @error Then $iC[4] = UBound($aTMP)

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

    For $i = 0 To UBound($sC) - 1
    If $iC[$i] > $iMax Then
    $iMax = $iC[$i]
    $cSeperator = $sC[$i]
    EndIf
    Next
    EndIf

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

    ; creating 2-dim array based on the number of data in the first line
    $aTMP = StringSplit($aLines[1], $cSeperator)
    Local $iCol = $aTMP[0]
    Local $aRet[$aLines[0]][$iCol]

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

    ; splitting and filling the lines
    For $i = 1 To $aLines[0]
    $aTMP = StringSplit($aLines[$i], $cSeperator)
    If @error Then ContinueLoop
    If $aTMP[0] > $iCol Then
    Switch $iColumnMode
    Case 0
    Return SetError(2, $i)
    Case 1
    ReDim $aRet[$aLines[0] - 1][$aTMP[0]]
    Case 2
    $aTMP[0] = $iCol
    Case Else
    Return SetError(3)
    EndSwitch
    EndIf
    For $j = 1 To $aTMP[0]
    $aTMP[$j] = StringStripWS($aTMP[$j], 3)
    If $bFilterString Then ; removing leading and trailing " or '
    $aTMP[$j] = StringRegExpReplace($aTMP[$j], '^("|'')(.*?)\1$', '$2')
    EndIf
    $aRet[$i - 1][$j - 1] = $aTMP[$j]
    Next ; /cols
    Next ; /lines

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

    Return $aRet
    EndFunc ;==>_CSV2Array

    [/autoit]


    Funktioniert soweit auch ganz ok - zum Teil immerhin.
    Lese ich eine .csv mit einer Zeilenanzahl von 20 und
    Spaltenanzahl von 20 ein, klappt es einwandfrei.

    Wenn die .csv allerdings über 100 Zeilen und 3 Spalten
    umfasst, gibs da in dem Array Chaos. Der Inhalt der Zeilen
    und Spalten wird zwar auch 100 Zeilen verteilt, allerdings
    auch auf 7 Spalten. Ausserdem werden die ";" mit hinein-
    geschrieben...

    Fehler in der Funktion?

    Gibs da noch andere Möglichkeiten außer die genannte?

  • Dateien mit bestimmten Endungen löschen

    • Scritch
    • 11. Oktober 2010 um 12:25

    Alles klar, danke. Das wars nicht alleine. Habe da noch einen anderen Fehler in meinem Script gefunden.

  • Dateien mit bestimmten Endungen löschen

    • Scritch
    • 11. Oktober 2010 um 10:13

    Hallöchen
    hoffe ihr hattet ein angenehmes Weekend :)
    Bin noch zurück, was das ursprüngliche Problem betrifft.
    Also, nur indirekt, wollte deswegen aber keinen neuen Thread aufmachen.

    Und zwar möchte ich den Pfad wo eine Date gelöscht wurde, in eine
    Logdatei schreiben.

    Habs erst so probiert:

    Spoiler anzeigen
    [autoit]

    #include "_GetFilesFolder_Rekursiv.au3"
    #include <Filese.au3>
    $a345 = _GetFilesFolder_Rekursiv("D:\", "345", 0)
    For $i = 1 To $a345[0]
    if not StringInStr($a345[$i],"D:\nicht löschen\") then
    _FileWriteLog(@ScriptDir & "\log.txt", $a345[$i] & @CRLF)
    FileDelete($a345[$i])
    EndIf
    Next

    [/autoit]

    Funktioniert nicht.

    Dann so:

    Spoiler anzeigen
    [autoit]

    #include "_GetFilesFolder_Rekursiv.au3"
    #include <Filese.au3>
    $a345 = _GetFilesFolder_Rekursiv("D:\", "345", 0)
    For $i = 1 To $a345[0]
    if not StringInStr($a345[$i],"D:\nicht löschen\") then
    _FileWriteFromArray(@ScriptDir & "\log.txt", $a345]$i])
    FileDelete($a345[$i])
    EndIf
    Next

    [/autoit]


    Funktioniert auch nicht.

    Der Pfad steht aber schon im Array, oder? 8o

    Also, möchte immer nur das in die Logdatei schreiben, was auch gelöscht wurde.

  • 2D-Array - Array in Array?

    • Scritch
    • 8. Oktober 2010 um 14:55

    Hey,

    so, habe deines gerade mal ausprobiert m-obi. Das funktioniert genau so, wie es soll. Vielen Dank dafür <3
    Auch vielen Dank an alle anderen die so viel Geduld aufgebracht haben :)

  • Spalte aus Array löschen

    • Scritch
    • 8. Oktober 2010 um 14:39

    Genau das, SEuBo :) Danke dir!

  • Spalte aus Array löschen

    • Scritch
    • 8. Oktober 2010 um 13:19

    Ich kann mit ArrayDelte() ein spezifiziertes Element aus einem Array löschen.
    Aber kann ich auch eine ganze Spalte löschen?

  • _ExcelReadSheetToArray schreibt Zeilen- und Spaltenzahl ins Array

    • Scritch
    • 8. Oktober 2010 um 12:43

    Was ist das denn fürn Crap? Ganz ehrlich :cursing:
    Man kann doch sicher Zeile und Spalte 1 aus einem Array löschen...

    mal schauen...

    Danke ersmtal.

  • _ExcelReadSheetToArray schreibt Zeilen- und Spaltenzahl ins Array

    • Scritch
    • 8. Oktober 2010 um 11:55
    Spoiler anzeigen
    [autoit]

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

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

    Local $obeispiel = _ExcelBookOpen(@ScriptDir & "\beispiel.xlsx", 1, False, "", "")
    Local $abeispiel = _ExcelReadSheetToArray($obeispiel, 1, 1)
    _ExcelBookClose($obeispiel)
    _ArrayDisplay($abeispiel)

    [/autoit]

    Dateien

    beispiel.zip 5,77 kB – 257 Downloads
  • _ExcelReadSheetToArray schreibt Zeilen- und Spaltenzahl ins Array

    • Scritch
    • 8. Oktober 2010 um 11:32

    Moin,

    beim Einlesen einer Exceltabelle, mit sagen wir 19 Zeilen und 3 Spalten, in ein Array
    wird die Anzahl von Spalten und Zeilen mit in das Array geschrieben.

    Das ist nicht das alleinige Problem: Die erste Spalte ist komplett frei,
    sodass es quasi ein 4 spaltiges Array wird.

    Wie kann das sein?

    Ich habe norlich die include schon verändert, weil das Skript immer in einen
    Fehler lief. Muss da noch was geändert werden? Geändert habe ich einfach nur
    2 Buchstaben, die im englischen anders waren...

    So siehts aus:

  • 2D-Array - Array in Array?

    • Scritch
    • 8. Oktober 2010 um 10:49

    Naja, die Sache mit dem Knoten: Für einen Anfänger gar nicht so einfach.
    Vor allem wirds zum Ende nicht unbedingt leichter verständlicher ;)
    Ich versuchs ja zu verstehen...

  • Dateien mit bestimmten Endungen löschen

    • Scritch
    • 8. Oktober 2010 um 10:35

    And the winner iiiiiiiiiiiiisssssssssss: Ezzora. GZ :D
    Ne, danke nochmal an dieser Stelle für eure Hilfe <3

  • Dateien mit bestimmten Endungen löschen

    • Scritch
    • 8. Oktober 2010 um 08:57
    Zitat von Ezzora


    JEtzt nervst langsam, obn hab ich dir eine funktionierende gemacht und nun willste doch ne andere -.-

    Sorry, habe ich nicht gemacht um dich zu ärgern. Wollt halt nicht, dass ihr euch eure Köppe noch einschlag ;)

  • Dateien mit bestimmten Endungen löschen

    • Scritch
    • 8. Oktober 2010 um 08:40

    Da habe ich ja was angerichtet :D
    Danke für eure Gedanken zu meinem Problem.
    Ich dachte mir jetzt aber, dass ich etwas umstrukturiere.
    Ich bräuchte die UND-Verknüpfung nicht. Die eine Datei
    kann ich auch so sichern, dass sie nicht gelöscht wird.

    Aber selbst eine einfach Abfrage klappt bei mir nicht.
    Das ist doch zum Mäuse melken :cursing:

    Dieses eine Verzeichnis soll stehen bleiben. Nichts weiter.

    [autoit]

    #include "_GetFilesFolder_Rekursiv.au3"

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

    $a345 = _GetFilesFolder_Rekursiv("d:\", "345", 0)

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

    For $i = 1 To $a345
    if $a345[$i] = "D:\nicht löschen\*.345" then
    FileDelete($a345[$i])
    EndIf
    Next

    [/autoit]
  • 2D-Array - Array in Array?

    • Scritch
    • 8. Oktober 2010 um 08:24

    Moin,

    gerade ausprobiert, aber selber Fehler wie vorher. Beendet sich bevor die Schleife durchlaufen wird,
    und es wird nichts in die log.txt geschrieben.

    Mal was anderes:

    Spoiler anzeigen
    [autoit]

    Local $sOut = ''
    For $i = 0 To UBound($Files2d) - 1
    _ArraySearch($anegativliste, $Files2d[$i][0], 0, 0, 1, 1)
    If @error Then
    _ArraySearch($areferenz, $Files2d[$i][0], 0, 0, 1, 1)
    If @error Then
    $sOut &= $Files2d[$i][0] & ' ' & $Files2d[$i][1] & ' ' & $Files2d[$i][2] & @CRLF
    EndIf
    EndIf
    Next

    [/autoit]


    Kann es nicht einfach sein, dass man bei $anegativliste und $areferenz auch einfach die größe
    mit angeben muss?

  • Dateien mit bestimmten Endungen löschen

    • Scritch
    • 7. Oktober 2010 um 17:58

    Habs gerade nochmal geprüft, scheint alles zu stimmen. Die UND-Verknüpfung spinnt allerdings irgendwie.
    "If Keyword must have a thenstatement"
    Wenn ich allerdings das nach dem and wegnehmen, Funktionierts auch nicht. Er löscht gar nichts.

    Spoiler anzeigen
    [autoit]

    #include "_GetFilesFolder_Rekursiv.au3"
    $a345 = _GetFilesFolder_Rekursiv("d:\", "345", 0)

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

    For $i = 1 To $a345
    if not $a345[$i]="D:\nicht löschen\1.345" and if not $a345[$i]="D:\nicht2\2.345" then
    FileDelete($a345[$i])
    EndIf
    Next

    [/autoit]
  • Dateien mit bestimmten Endungen löschen

    • Scritch
    • 7. Oktober 2010 um 17:18
    Zitat von nuts

    Das wäre die AND-Verknüpfung.

    Ist ja quasi das, was ich gesagt habe. Funktionrt nur genauso wenig :D
    Wenn ich die Bedingung orweg schreibe, werden gar keine Dateien gelöscht :whistling:

  • 2D-Array - Array in Array?

    • Scritch
    • 7. Oktober 2010 um 12:51

    Hi,

    achso, das mit den .xlsx-Dateien ist mein Fehler. Hatte die gestern neu
    erstellt und nicht dran gedacht in .xls umzuformatieren.

    Zu deiner anderen Frage, bzw. Annahme. Nein, es soll nicht nur die erste Spalte kontrolliert werden.

    Ich versuchs nochmal:
    (Shema für die Tabelle: Spalte1 Spalte2 Spalte3)

    Array $Files2d 1. Zeile: LaufenderDienst Enabled Wahr wird verglichen mit Array $anegativliste : Allerdings ist der Eintrag so nicht vorhanden, d. h. es steht in keiner Zeile des Dokuments, bzw. des Arrays $anegativliste LaufenderDienst Enabled Wahr. So, nun wird in $areferenz nach dieser Zeile gesucht. Also, steht irgendwo in $areferenz in irgendeiner Zeile LaufenderDienst Enabled Wahr genauso da, ist es ok. Dann wird mit der nächsten Zeile und den 3 Elementen aus $Files2d weitergemacht.

    Ist der Eintrag LaufenderDienst Enabled Wahr nicht haargenau so in $areferenz vorhanden, wird die zu suchende Zeile und deren 3 Elemente in "log.txt" geschrieben.
    Dies geschieht auch, wenn z. B. Der Eintrag in folgender Kombination in $areferenz vorhanden ist: LaufenderDienst Enabled Falsch. Also, es soll nicht erst die 1. Spalte komplett, dann die 2 Spalte komplett usw. miteinander verglichen werden. Sondern Zeile für Zeile.


    Zitat von Kleiner

    Da schaut die func in dem moment in die Excel datei und gib das wieder was da steht. Ist wahrscheinlich nicht richtig oder??

    Nene, die gibt nur den Suchbegriff aus $Files2d wieder, der in beiden Exceldateien bzw. deren Arrays nicht gefunden wurde. Und das schreibt er halt in die log.txt

  • Dateien mit bestimmten Endungen löschen

    • Scritch
    • 7. Oktober 2010 um 12:19

    Verdammt. Ja, stimmt. Das mit dem Array war unüberlegt.
    War da irgendwie noch bei Batch gerade, als ichs geschrieben habe :sleeping:


    [autoit]

    Not $a345[$i] = "d:\nicht löschen\" Then

    [/autoit]


    Das soll eine typische NAND-Verknüpfung sein, wenn man das so nennen kann.
    Nur wenn beides Nicht wahr ist, dann soll die Datei die in $a345[$i] gerade steht
    gelöscht werden...

    Oder mache ich da einen Denkfehler?

  • Dateien mit bestimmten Endungen löschen

    • Scritch
    • 7. Oktober 2010 um 11:09

    Hmmm... was? :D Wieso

    [autoit]

    StringRegExe

    [/autoit]


    ?
    Ein Array hatte ich ja zuerst, brauchte ich dann aber doch nicht.

    Hätte eig. gedacht, dass es so jetzt funktioniert:

    Spoiler anzeigen
    [autoit]

    #include "_GetFilesFolder_Rekursiv.au3"
    $a345 = _GetFilesFolder_Rekursiv("d:\", "345", 0)
    For $i = 1 To $a345[0]
    If Not [$i] = "d:\nicht löschen.345" Then
    If Not [$i] = "d:\nicht löschen\" Then
    FileDelete($a345[$i])
    EndIf
    EndIf
    Next

    [/autoit]


    Pustekuchen.
    "Line 4 - Error in Expression"
    Was ist an "If Not [$i] = "d:\nicht löschen.345" Then" verkehrt? :pinch:

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™