Datei kopieren

  • Hallo gemeinde,

    ich muss mal wieder eine kleine Frage stellen. Ich bekomme jeden Tag viele Eifact Rechnungen und die dazugehörigen EVNs. Meine Script läuft soweit gut.

    Spoiler anzeigen
    [autoit]

    #include <File.au3>
    #include <date.au3>
    #include <array.au3>
    #include <string.au3>
    Opt("TrayIconDebug", 1) ;0=no info, 1=debug line info
    ;
    Global $pathMain = "C:\GLI_PROD\Mapping\EDI_Eingang\" & @MDAY & "." & @MON & "." & @YEAR & "_test" & ".txt"
    Dim $pfad = "C:\GLI_PROD\Mapping\EDI_Eingang\"
    Dim $string = _FileListToArray($pfad, "*.INH";) ; liest alle *.INH-Files in Array $string
    Dim $match, $frta
    Dim $arErgebnis[1]
    Dim $arErgebnis1[1]
    ;Dim $pathMain
    If Not IsArray($string) Then
    MsgBox(16, "", "Keine Inhouse Datei(en) gefunden.. EXIT!";)
    Exit
    EndIf
    For $i = 1 To $string[0] ; Dateiliste abarbeiten
    _FileReadToArray($pfad & $string[$i], $frta)
    If @error <> 0 Then
    MsgBox(4096, "Error", " Fehler beim Einlesen der Datei: " & $pfad & $string[$i] & @LF & "Fehler: " & @error)
    Else
    $match = _StringBetween($frta[2], "/", ";";) ; Wert in Zeile 2 auslesen
    If Not @error Then
    If StringInStr($frta[1], "ER2529";) Then ; Eintrag ist vorhanden
    If StringInStr($frta[2], "K;380";) Then
    _TAG ()
    _ArrayAdd($arErgebnis, "Datei: " & $string[$i] & " mit RE.-Nr.: " & $match[0])
    Sleep(1500)
    ElseIf StringInStr($frta[2], "K;130";) Then ; Eintrag ist vorhanden
    _TAG_EVN ()
    Sleep(1500)
    EndIf
    _FileWriteFromArray($pathMain, $arErgebnis, 1)
    EndIf
    Else
    ;
    MsgBox(4096, "", "In Datei: " & $string[$i] & " ist Nummer nicht enthalten.";)
    EndIf
    EndIf
    Next

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

    ;
    Func _TAG ()
    If FileExists("C:\GLI_PROD\Mapping\ELFE_\Rechnung\Rechnung\" & @YEAR & "\" & @MON & " " & @YEAR & "\";) Then ; Ordner vorhanden
    FileMove("C:\GLI_PROD\Mapping\EDI_Eingang\" & $string[$i], "C:\GLI_PROD\Mapping\ELFE_\Rechnung\Rechnung\" & @YEAR & "\" & @MON & " " & @YEAR & "\", 1)
    Else
    DirCreate("C:\GLI_PROD\Mapping\ELFE_\Rechnung\Rechnung\" & @YEAR & "\" & @MON & " " & @YEAR & "\";) ; Ordner anlegen mit Datum Jahr\Monat Jahr
    FileMove("C:\GLI_PROD\Mapping\EDI_Eingang\" & $string[$i], "C:\GLI_PROD\Mapping\ELFE_\Rechnung\Rechnung\" & @YEAR & "\" & @MON & " " & @YEAR & "\", 1)
    EndIf
    EndFunc ;==>_TAG
    Func _TAG_EVN ()
    If FileExists("C:\GLI_PROD\Mapping\ELFE_\EVN\EVN\" & @YEAR & "\" & @MON & " " & @YEAR & "\";) Then ; Ordner vorhanden
    FileMove("C:\GLI_PROD\Mapping\EDI_Eingang\" & $string[$i], "C:\GLI_PROD\Mapping\ELFE_\EVN\EVN\" & @YEAR & "\" & @MON & " " & @YEAR & "\", 1)
    Else
    DirCreate("C:\GLI_PROD\Mapping\ELFE_\EVN\EVN\" & @YEAR & "\" & @MON & " " & @YEAR & "\";) ; Ordner anlegen mit Datum Jahr\Monat Jahr
    FileMove("C:\GLI_PROD\Mapping\EDI_Eingang\" & $string[$i], "C:\GLI_PROD\Mapping\ELFE_\EVN\EVN\" & @YEAR & "\" & @MON & " " & @YEAR & "\", 1)
    EndIf
    EndFunc ;==>_TAG_EVN

    [/autoit]

    Nun habe ich aber das Problem, das während eines Monatszyklus das Datum in den Dateien wechselt.

    Spoiler anzeigen


    Auszug aus der Zeile Mai
    K;380;D--01/9005547731;9;20070501;20070501;20070531;31;;5608421124;;;;

    Spoiler anzeigen


    Auszug aus der Zeile Juni
    K;380;D--01/9005547854;9;20070601;20070601;20070630;31;;5608421124;;;;

    Wie kann ich es erreichen das das Datum ausgewertet wird und in den richtigen Monatsordner verschoben wird. Momentan verschiebe ich alles in ein und denselben Monatsordner.
    Vielleicht habt ihr ja ne Idee.

    MFg
    Thomas B

    MFG ThomasB

    *
    Ich lese viel und gerne (und wenn ich alle Mahnungen durch habe, schmeiße ich sie weg)
    *

  • Hallo,

    ja gut kannst hier mal ein Beispiel machen wie das richtig geht, da es sich hier um fortlaufendes Datum handelt.

    mfg

    thomasb

    MFG ThomasB

    *
    Ich lese viel und gerne (und wenn ich alle Mahnungen durch habe, schmeiße ich sie weg)
    *

  • Hallo,

    gut ich habe es so gelöst.

    Spoiler anzeigen
    [autoit]

    If StringReplace($frta[2], ";", ";") Then
    $var = @YEAR & @MON

    [/autoit]

    Nur zwei Frage habe ich noch wie bekomme ich den zweiten Wert(ist der wichtigere)
    K;380;D--01/9013088758;9;20070604;20070601;20070630;31 und wie drehe ich dann die Variabele so das wieder so hinbekomme "@YEAR & "\" & @MON & " " & @YEAR"

    MFG

    ThomasB


    geht doch noch nicht

    MFG ThomasB

    *
    Ich lese viel und gerne (und wenn ich alle Mahnungen durch habe, schmeiße ich sie weg)
    *

    Einmal editiert, zuletzt von Thomasb (4. Juni 2007 um 16:11)

  • Hallo,

    das ist der Wert der ich brauche ;20070601; Auch hat es irgendwie noch nicht recht gefunkt. Ich übe aber noch.

    ThomasB

    MFG ThomasB

    *
    Ich lese viel und gerne (und wenn ich alle Mahnungen durch habe, schmeiße ich sie weg)
    *

  • [autoit]


    $var = "K;380;D--01/9013088758;9;20070604;20070601;20070630;31"

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

    $splitt = StringSplit($var, ";")

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

    MsgBox(0, "", $splitt[6])

    [/autoit]

    ?

    • Offizieller Beitrag

    HI,

    oder

    Spoiler anzeigen
    [autoit]

    $str ='K;380;D--01/9005547854;9;20070601;20070601;20070630;31;;5608421124;;;;'

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

    MsgBox(0, "", _getDate($str))

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

    Func _getDate($str)
    $value = StringRegExp($str, '(?<=20\d{6};).*?(?=;20\d{6};)', 3)
    If IsArray($value) Then Return $value[0]
    Return -1
    EndFunc ;==>_getDate

    [/autoit]

    So long,

    Mega

  • Hallo,

    nun ist es ja festgeschrieben. Da diese Zeile eine sich ständig ändernde ist sprich sich auch Rechnungsnummern dort drin befinden weis ich nicht ob es so geht?

    ThomasB

    MFG ThomasB

    *
    Ich lese viel und gerne (und wenn ich alle Mahnungen durch habe, schmeiße ich sie weg)
    *

  • naja, einfach das was eingelesen wird / das später bearbeitete in ne variable speichern-


    Sowohl mega als auch meine variante unterstützen variablen :]

  • Hallo,

    danke erstmal. Ich hoffe das ich es richtig gelöst habe. Die ersten Test waren eigentlich gut.

    Spoiler anzeigen
    [autoit]

    $var= @YEAR & @MON
    If StringInStr($frta[1], "ER2529") Then ; Eintrag ist vorhanden
    If StringInStr($frta[2], "K;380") Then
    If StringInStr($frta[2], $var , 34) Then

    [/autoit]

    Ich hoffe es passt.

    Mfg ThomasB

    MFG ThomasB

    *
    Ich lese viel und gerne (und wenn ich alle Mahnungen durch habe, schmeiße ich sie weg)
    *

    Einmal editiert, zuletzt von Thomasb (4. Juni 2007 um 18:17)

  • hi,

    ich muss das Thema nochmals aufgreifen.Irgendwie will es nicht mehr so wie ich es mal wollte.
    Das sind die zweiten Zeile aus verschiedene Dateien die ich auslesen und nach dem dort drin enthaltenem Datum verschieben möchte.

    Spoiler anzeigen

    K;380;D--01/9005676256;9;20070622;20070701;20070731;31;...

    Spoiler anzeigen

    K;380;D--01/9005547731;9;20070601;20070601;20070630;31....

    Hier mein Ansatz

    Spoiler anzeigen
    [autoit]

    #include <File.au3>
    #include <date.au3>
    #include <array.au3>
    #include <string.au3>
    Opt("TrayIconDebug", 1) ;0=no info, 1=debug line info
    ;
    Global $pathMain = "C:\GLI_PROD\Mapping\EDI_Eingang\" & @MDAY & "." & @MON & "." & @YEAR & "_test" & ".txt"
    Global $pathMain1 = "C:\GLI_PROD\Mapping\EDI_Eingang\" & @MDAY & "." & @MON & "." & @YEAR & "_o" & ".txt"
    Dim $pfad = "C:\GLI_PROD\Mapping\EDI_Eingang\"
    Dim $string = _FileListToArray($pfad, "*.INH";) ; liest alle *.INH-Files in Array $string
    Dim $match, $frta
    Dim $arErgebnis[1]
    Dim $arErgebnis1[1]
    ;Dim $pathMain
    $var = @YEAR & @MON
    $time = StringFormat("%02d", @YEAR & @MON, 0)
    If Not IsArray($string) Then
    MsgBox(16, "", "Keine Inhouse Datei(en) gefunden.. EXIT!";)
    Exit
    EndIf
    ;
    For $i = 1 To $string[0] ; Dateiliste abarbeiten
    _FileReadToArray($pfad & $string[$i], $frta)
    If @error <> 0 Then
    MsgBox(4096, "Error", " Fehler beim Einlesen der Datei: " & $pfad & $string[$i] & @LF & "Fehler: " & @error)
    Else
    $match = _StringBetween($frta[2], "/", ";";) ; Wert in Zeile 2 auslesen
    If Not @error Then
    If StringInStr($frta[1], "ER2529";) And StringInStr($frta[2], "K;380";) And StringInStr($frta[2], $var, 34) Then
    MsgBox(4096, "", "vorhanden bei datei: " & $string[$i] & " " & $match[0], 20)

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

    Else
    MsgBox(64, "", $string[$i] & " " & $match[0] & " anderes Datum", 10)
    ;_ArrayAdd($arErgebnis, "Datei: " & $string[$i] & " mit RE.-Nr.: " & $match[0])
    Sleep(1500)
    EndIf

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

    _FileWriteFromArray($pathMain, $arErgebnis, 1)
    Else
    MsgBox(4096, "", "In Datei: " & $string[$i] & " ist Nummer nicht enthalten.";)
    EndIf

    [/autoit]

    Der normale Teile geht. Aber wenn auf das Datum geschaut wird geht es nicht. Wo liegt mein Fehler?

    MFG Thomas

    MFG ThomasB

    *
    Ich lese viel und gerne (und wenn ich alle Mahnungen durch habe, schmeiße ich sie weg)
    *

    • Offizieller Beitrag

    Hallo,

    warum zerlegst Du nicht einfach die Zeile mit StringSplit?

    [autoit]

    $split = StringSplit($frta[2],";")

    [/autoit]

    Dann befindet sich in $split[6] das 1. gesuchte Datum und in $split[7] das 2. Datum.

  • hi BErnd

    kannst du mir das etwas näher erklären ich habe mit dem StringSplit noch nicht geabeitet.

    [autoit]

    StringInStr($frta[2], $split[6])

    [/autoit]

    Ist das so richtig? Ich benötig nur das erste Datum um den Zeitpunkt (Daten kommen täglich) zu erhalten wann ein neues Datum kommt,

    Thomas

    MFG ThomasB

    *
    Ich lese viel und gerne (und wenn ich alle Mahnungen durch habe, schmeiße ich sie weg)
    *

    • Offizieller Beitrag

    Hallo,

    wenn Du den String

    Code
    K;380;D--01/9005547731;9;20070501;20070501;20070531;31;;5608421124;;;;


    der bei dir ja in $frta[2] steht mit

    [autoit]

    $split = StringSplit($frta[2],";")

    [/autoit]

    zerlegst steht in

    [autoit]

    $split[0] = 14 ;Anzahl der Teilstrings
    $split[1] = "K"
    $split{2] = "380"
    $split[3] = "D--01/9005547731"
    $split[4] = "9"
    $split[5] = "20070501"
    $split[6] = "20070501"
    $split[7] = "20070531"
    $split[8] = "31"
    $split[9] = ""
    $split[10] = "5608421124"
    $split[11] = ""
    $split[12] = ""
    $split[13] = ""
    $split[14] = ""

    [/autoit]

    Was willst Du mit

    [autoit]

    StringInStr($frta[2], $split[6])

    [/autoit]

    den erreichen?