Hallo zusammen,
ich habe mal wieder ein Problem
Irgendwie verstehe ich die Arrays einfach nicht, habe das so wie ich das verstehen würde angepasst, leider ohne Erfolg.
Ich möchte alle Daten aus einer TXT auslesen und dann in eine csv konvertieren.
Die TXT ist wie folgt aufgebaut:
01.01.2017 00:02
01.01.2017 00:10
....
Ich möchte folgende Daten auslesen:
Tag Anzahl Einträge.
Beispiel:
01.01.2017 00:00 - 00:59 3 Einträge
01.01.2017 01:00 - 01:59 4 Einträge
...
Vielen Dank vorab.
Code
#include <array.au3>
Global $sSep=" " ;Trennzeichen zwischen Spalten in der Tabelle
$sFileData=FileRead("C:\Test\Datum.txt")
local $arResult=StringRegExp($sFileData,"(?m)^\d\d.(\d\d).\d\d\d\d"&$sSep&"(*?:*?)",4);RegExpPattern um das wichtige zu FilternRegExpPattern um das wichtige zu Filtern
;(?m) sagt das ^ den Zeilenanfang sucht, nicht den Textanfang
;\d ist eine Zahlm also wird dort das Datum gesucht. Die () um den Monat sorgen dafür, dass dieser Teil einen eigenen Eintrag im Array bekommt. (Capture Group)
;Danach kommt der Spalten Trenner. Das ?: in den () Danach, sagt, dass die Klammer ein Ausdruck ist, der nicht gematcht werden soll. Somit wird die Spalte danach übergangen
;Und die Spalte danach wird als Gebäude wieder gespeichert. (.*?) findet alles, bis das danach kommt, hier also der Spaltentrenner
;Für genauere Infos sieh dir die Hilfe zu StringRegExp an :)
local $arEntryDates[0][2];Array anlegen, indem für jedes Gebäude ein Array gespeichert wird
for $i=0 to UBound($arResult)-1 step 1;Alle funde durchgehen
local $arInsert=$arResult[$i];Auf das jeweilige Ergebnis zugreifen
local $index=_ArraySearch($arEntryDates,$arInsert[2],0,0,0,0,1,0);Gucken, ob das Gebäude bereits einen Eintrag hat
if $index=-1 then;Wenn nicht einen neuen anlegen
$index=UBound($arEntryDates)
ReDim $arEntryDates[UBound($arEntryDates)+1][2];Array um 1 vergrößern
local $tmp[0][2];ein 2d Array für Monat und Count anlegen
$arEntryDates[$index][0]=$arInsert[2];Gebäudenamen reinschreiben
$arEntryDates[$index][1]=$tmp;Array eintragen
endif
local $arGet=$arEntryDates[$index][1];Array zu dem Gebäude abrufen
local $indexSec=_ArraySearch($arGet,$arInsert[1],0,0,0,0,1,0);Nachsehen, ob der Monat schon einen Eintrag hat
if $indexSec<0 then;Wenn nicht einen neuen Erstellen
$indexSec=UBound($arGet)
ReDim $arGet[$indexSec+1][2];Array vergrößern
$arGet[$indexSec][0]=$arInsert[1];Monatsnummer
$arGet[$indexSec][1]=1;Ersten Count, den aktuellen
else
$arGet[$indexSec][1]=$arGet[$indexSec][1]+1;Sonst den Zähler an der Stelle, wo der Monat gefunden wurde erhöhen
endif
$arEntryDates[$index][1]=$arGet;Array zurückschreiben, da AutoIt Arrays kopiert und keine Pointer nimmt
next
local $sErg=""
for $i=0 to UBound($arEntryDates)-1 step 1
$sErg&=$arEntryDates[$i][0]&@crlf;Den Gebäudenamen hinzufügen
local $arTmp=$arEntryDates[$i][1];Array abfragen
_ArraySort($arTmp);Sortieren, damit die Monate untereinander in der richtigen Reihenfolge sind und nicht nach dem ersten Fund sortiert sind
for $j=0 to UBound($arTmp)-1 step 1;Alle Monate durchlaufen und an den String anhängen
$sErg&=$arTmp[$j][0]&$sSep&$arTmp[$j][1]&@crlf
Next
next
MsgBox(48,"",$sErg)
FileWrite("C:\Test\Auswertung.csv",$sErg)
Alles anzeigen