Zwei TXT vergleichen

  • nabend kollegen,

    ich glaube das ich mein beschriebenes Problem nach langem Kampf mit der Hife gelöst habe. Ich hoffe jedenfalls das es der Weg ist. Ich habe die Func an einen anderen für mich noch nicht verständlichen Teil eingebaut. Seitdem geht es.

    Spoiler anzeigen
    [autoit]

    ; Dateivergleich anhängen der Unterschiede
    ;in abgeänderter Form in der Func
    #include <file.au3>
    #include <Array.au3>

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

    Global $pathMain = "c:\Programme\Autoit3\Include\Referenz.prob"
    Global $pathCompare = "c:\Programme\Autoit3\Include\taeglich.txt"
    Global $mainFile_A
    Global $oldFile_A = $mainFile_A
    Global $compare_A

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

    If Not _FileReadToArray($pathMain, $mainFile_A) Then
    MsgBox(4096, "Error", " Error reading log to Array error:" & @error)
    Exit
    EndIf

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

    If Not _FileReadToArray($pathCompare, $compare_A) Then
    MsgBox(4096, "Error", " Error reading log to Array error:" & @error)
    Exit
    EndIf

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

    For $i = 1 To UBound($compare_A) - 1
    ;MsgBox(0,"", "Ich nehme jetzt " & $compare_A[$i] & " und werde gleich gucken ob es mit .cdr endet",5 )
    If StringRight($compare_A[$i], 4) = ".cdr" Then
    ;MsgBox(0,"", $compare_A[$i] & " endet mit cdrund deshalb gucke ich jetzt ob es schon in der Ursprungsdatei steht",5 )
    _ArraySearch($mainFile_A, $compare_A[$i], 1)
    If @error = 6 Then
    _ArrayAdd($mainFile_A, $compare_A[$i])
    _verizon()
    Sleep(2000)
    EndIf
    ;MsgBox(0, "" , $compare_A[$i] &" ist nicht enthalten")
    EndIf
    Next
    Func _verizon()
    run("cmd.exe")
    Sleep(500)
    send('cd\{enter}')
    Sleep(500)
    Send($compare_A[$i])
    Sleep(1000)
    Send('{Enter}')
    Sleep(1000)
    Send("exit")
    Send('{Enter}')
    EndFunc

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

    _FileWriteFromArray($pathMain, $mainFile_A, 1, 0)
    ;RunWait(@ComSpec & ' /c start ' & $pathMain, '', @SW_HIDE)

    [/autoit]

    Wenn das nicht der richtige Weg ist sagt mir bescheid.

    MFG Taucher_2006

    PS: Gluck gluck weg war er!!!!! :schild4:

    :P Streite nie mit einem Idioten
    Erst zieht er dich auf sein Niveau herunter und schlägt dich dort mit seiner Erfahrung :D

  • Hallo,

    habe lange getestet un ddas Script läuft. Nun wollte ich es als Dienst laufen lassen. Dazu habe ich einen Zeitschlüssel eingebaut und die Anweisungen zum Dienst befolgt. Leider starte es nicht. Woran kann es liegen? Kann mir wer helfen.

    MFG Taucher_2006

    [autoit]

    $Ti=@HOUR & ":" & @MIN & ":" & @SEC

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

    If $Ti="17:25:00" Then
    If Not FileExists ($pathCompare) Then
    _Liste()
    EndIf

    [/autoit]

    :P Streite nie mit einem Idioten
    Erst zieht er dich auf sein Niveau herunter und schlägt dich dort mit seiner Erfahrung :D

  • nabend,

    klar hier ist es

    Spoiler anzeigen
    [autoit]

    #include <file.au3>
    #include <Array.au3>
    #include <INet.au3>
    #include <date.au3>
    Global $pathMain = "C:\Programme\AutoIt3\Include\Referenz.prob"
    Global $pathCompare = "C:\Programme\AutoIt3\Include\taeglich.txt"
    Global $mainFile_A
    Global $oldFile_A = $mainFile_A
    Global $compare_A
    $Outlook2003 = @ProgramFilesDir & "\Microsoft Office\Office11\Outlook.exe"
    $PID = ProcessExists("Outlook.exe")
    $Ti=@HOUR & ":" & @MIN & ":" & @SEC
    If $Ti="17:50:00" Then
    If Not FileExists ($pathCompare) Then
    _Liste()
    EndIf
    Sleep(12000)
    If Not _FileReadToArray($pathCompare, $compare_A) Then
    _errormail1()
    Exit
    EndIf
    If Not _FileReadToArray($pathMain, $mainFile_A) Then
    _errormail2()
    Exit
    EndIf
    For $i = 1 To UBound($compare_A) - 1
    If StringRight($compare_A[$i], 4) = ".CDR" Then
    _ArraySearch($mainFile_A, $compare_A[$i], 1)
    If @error = 6 Then
    _ArrayAdd($mainFile_A, $compare_A[$i])
    _verizon()
    Sleep(120000)
    EndIf
    EndIf
    Next
    If _FileWriteFromArray($pathMain, $mainFile_A, 1, 0) Then
    FileDelete($pathCompare)
    EndIf
    Func _verizon()
    run("cmd.exe")
    Sleep(500)
    send('x:{enter}')
    Sleep(500)
    Send('cd xcftp\scripts{enter}')
    Sleep(1000)
    Send('get_file CDRs ')
    Send($compare_A[$i])
    Send('{Enter}')
    Sleep(120000)
    Send('exit')
    Send('{enter}')
    EndFunc
    Func _Liste()
    Run("cmd.exe")
    Sleep(500)
    send('x:{enter}')
    Sleep(500)
    Send('cd xcftp\scripts{enter}')
    Sleep(1000)
    Send('list_directory CDRs')
    Send('{Enter}')
    Sleep(60000)
    Send('list_directory CDRs')
    Sleep(1000)
    Send(' > X:\xcftp\etc\taeglich.txt')
    Send('{Enter}')
    Sleep(3000)
    Send('exit')
    Send('{enter}')
    EndFunc
    Func _errormail1()
    $Ti=@HOUR & ":" & @MIN & ":" & @SEC
    $Address=("xxx@ag.de")
    $Subject=("Fehler im Ladenvorgang der CDRs!")
    $Body = (" Die für den Ladenvorgang benötigte Datei im Pfad " & $pathMain & " wurden um " & $Ti & " nicht gefunden." & @LF & @LF & _
    " Der Ladevorgang wurde erfolglos beendet." & @LF & @LF & _
    " Freundliche Grüßen" & @LF & @LF &" Ihre Fileserver")
    If $PID Then
    _INetMail($address, $subject, $body)
    sleep(5000)
    Send("!s")
    Else
    Run($Outlook2003)
    WinWaitActive("Posteingang - Microsoft Outlook")
    _INetMail($address, $subject, $body)
    sleep(5000)
    Send("!s")
    EndIf
    EndFunc
    Func _errormail2()
    $Ti=@HOUR & ":" & @MIN & ":" & @SEC
    $Address=("xxx@ag.de")
    $Subject=("Fehler im Ladenvorgang der CDRs!")
    $Body = (" Die für den Ladenvorgang benötigte Datei im Pfad " & $pathCompare & " konnte um " & $Ti & " nicht erstellt werden." & @LF & @LF & _
    " Der Ladevorgang wurde erfolglos beendet." & @LF & @LF & _
    " Freundliche Grüße" & @LF & @LF &" Ihre Fileserver")
    If $PID Then
    _INetMail($address, $subject, $body)
    sleep(5000)
    Send("!s")
    Else
    Run($Outlook2003)
    WinWaitActive("Posteingang - Microsoft Outlook")
    _INetMail($address, $subject, $body)
    sleep(5000)
    Send("!s")
    EndIf
    EndFunc

    [/autoit]

    MFG
    Taucher

    :P Streite nie mit einem Idioten
    Erst zieht er dich auf sein Niveau herunter und schlägt dich dort mit seiner Erfahrung :D

    • Offizieller Beitrag

    Hi,

    ich glaube das gesamte Konzept ist falsch.

    Dienst heißt, dein Skript wird beim Starten des PCs gestartet. Anschließend solltest du eine while schliefe bauen, die bis 17.25.00 läuft und dann dein Skript ausführt.

    Um es deutlicher zu machen. Du brauchst eine Schleife in deinem Skript, die wartet bis zur Uhrzeit. Sekunde kannst du dabei auch weglassen und lieber ein Flag setzten.

    So long,

    Mega

  • moin moin,
    sollte das so aus sehen ?

    [autoit]

    While $Ti="10:20"
    While 1
    If Not FileExists ($pathCompare) Then
    _Liste()
    EndIf
    Sleep(12000)
    If Not _FileReadToArray($pathCompare, $compare_A) Then
    _errormail1()
    Exit
    EndIf
    If Not _FileReadToArray($pathMain, $mainFile_A) Then
    _errormail2()
    Exit
    EndIf

    For $i = 1 To UBound($compare_A) - 1
    If StringRight($compare_A[$i], 4) = ".CDR" Then
    _ArraySearch($mainFile_A, $compare_A[$i], 1)
    If @error = 6 Then
    _ArrayAdd($mainFile_A, $compare_A[$i])
    _verizon()
    Sleep(120000)
    EndIf
    EndIf
    Next
    If _FileWriteFromArray($pathMain, $mainFile_A, 1, 0) Then
    FileDelete($pathCompare)
    EndIf
    WEnd

    [/autoit]

    Mfg Taucher_2006

    :P Streite nie mit einem Idioten
    Erst zieht er dich auf sein Niveau herunter und schlägt dich dort mit seiner Erfahrung :D

    • Offizieller Beitrag

    Hi,

    ich gebe mal ein einfaches Beispiel:

    Spoiler anzeigen
    [autoit]


    #include "ServiceControl.au3"
    #include "Misc.au3"
    ;#NoTrayIcon ; Kann man natürlich auch noch wegmachen :)

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

    If _Singleton("MegaService", 1) = 0 Then
    MsgBox(64, "Warning", "An occurence of test is already running", 3)
    Exit
    EndIf

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

    Global $pathSrvAny = "c:\AutoIt-Skripte\Entwicklung\ForumTests\srvany.exe"
    Global $servicename = "MegaService"
    If Not _ServiceExists (@ComputerName, $servicename) And @Compiled Then
    _CreateService ("", $servicename, "Mega Skript", $pathSrvAny, "LocalSystem", "", 0x110)
    RegWrite("HKLM\SYSTEM\CurrentControlSet\Services\" & $servicename & "\Parameters", "Application", "REG_SZ", @ScriptFullPath)
    EndIf

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

    While 1
    Sleep(500)
    theFunc()
    WEnd

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

    Func theFunc()
    If @HOUR = 16 And @MIN = 24 And @SEC = 00 Then ; hier mal die Zeit anpassen :)
    ToolTip("Skript gestartet" & " Service An(1)Aus(0) :" & _ServiceExists (@ComputerName, $servicename), 0, 0)
    Beep(500, 5000)
    Else
    ToolTip("Skript inaktiv" & " Service An(1)Aus(0) :" & _ServiceExists (@ComputerName, $servicename), 0, 0)
    EndIf
    EndFunc ;==>theFunc

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

    zum Löschen des Dienstes:

    Spoiler anzeigen
    [autoit]

    #include "ServiceControl.au3"
    $servicename = "MegaService"
    _DeleteService("", $servicename)

    [/autoit]

    Die Include gibt es hier : ServiceControl.au3

    und SrvAny unter anderem hier : SrvAny.exe Download

    Hoffe, das hilft weiter.

    So long,

    Mega

  • hallo,

    danke für deine antwort. das habe ich soweit verstanden. doch mit diesem aufbau blockier ich mir weiter Autoit Scripts. ich wollte es direct eintragen als dienst, (mit srvnay.exe habe ich schon einen dienst zulaufen der im stunden rhytmus arbeitet) damit es im hintergrund arbeiten kann. Gibt es noch eine andere Lösung?

    taucher

    :P Streite nie mit einem Idioten
    Erst zieht er dich auf sein Niveau herunter und schlägt dich dort mit seiner Erfahrung :D

    Einmal editiert, zuletzt von taucher_2006 (1. Dezember 2006 um 20:37)

  • hi,

    ich habe wohl gestern im falschen film mitgespielt. ich habe nur mit SciTe geteste. nach dem kompilieren ging es. werde jetzt erstmal testen.

    :keks:
    mfg taucher

    :P Streite nie mit einem Idioten
    Erst zieht er dich auf sein Niveau herunter und schlägt dich dort mit seiner Erfahrung :D