Textersetzer Script fertigstellen mit Gegenleistung

  • Hallo

    ich habe vor einiger Zeit ein Skript begonnen, mit dem es möglich ist Wörter oder "Texte" in editierbaren Dateien zu ergänzen oder zu ersetzen. Ich habe es dann aufgegeben weil ich es zeitlich nicht mehr wegen meiner Familie und berufbedingt geschafft habe, diesen "Textersetzer" zu folgendem zu bewegen. Ich habe mit einiger Hilfe von Bekannten und diesem Forum es hinbekommen, das meiste mehr oder weniger gut zu realisieren was ich wollte. Zwei Dinge fehlen noch dabei.

    • Zip und 7z, ggf. RAR-Dateien entpacken, Text ersetzen, wieder packen.
    • Doc und docx Dateien sollten wenn möglich auch zu bearbeiten sein. (Falls ein Office auf Host-PC vorhanden)
    • Einfügen eines Lizenzsystemes

    Da ich nun seit über einem Jahr komplett aus dem Programmieren heraus bin und weiterhin keine Zeit haben werde, möchte ich Euch fragen ob Ihr gegen Entgeld meinen Traum wahr werden lassen könnt. Bin bereit, zur Fertigstellung o. g. Punkte zu bezahlen. Daher sage ich jetzt mal fest 250 € bei Funktionalität nach Fertigstellung zu, falls das nicht reichen sollte bitte ich um ein Angebot derjenigen, die mir helfen möchten.

    Ich hefte meine au3 hier mal an. Würde mich sehr über eine verlässliche Rückmeldung freuen.

  • Falls sich noch jemand damit beschäftigen möchte:
    Zum entpacken und packen einer Datei kann man folgendes verwenden:

    Spoiler anzeigen
    [autoit]

    global $UnZipTime=0

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

    Func Unzip($path,$tempPath=@TempDir)
    $UnZipTime=0
    AdlibRegister(observateZip(),1000)
    _7ZipProgress("7zG.exe", $path, $tempPath, false)
    AdlibUnRegister(observateZip())
    if @error then
    return @error
    EndIf
    if $UnZipTime=30 then
    return -1
    endif
    return 1
    EndFunc

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

    Func zip($path,$OutPath)
    $ar=StringSplit($OutPath,".")
    _7ZipProgress($s7ZipEXE, $path, $OutPath, True, $ar[UBound($ar)-1])
    return 1
    EndFunc

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

    Func observateZip()
    $UnZipTime+=1
    if $UnZipTime=30 then
    ProcessClose("7zG.exe")
    endif
    EndFunc

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

    Func _7ZipProgress($s7ZipEXE, $sSource, $sDestination = @TempDir, $fPack = True, $sPackType = '7z', $iPackLv = 5, $sAdditionalCommands = '', $sFuncToCall = '', $iMinPercentage = 0, $iMaxPercentage = 100, $iUpdateRate = 50)
    Local $sCommand, $iSize, $hTimeBefore, $iPID, $aProcessStats, $iPercentage
    If Not FileExists($s7ZipEXE) Or Not FileExists($sSource) Or $sDestination = '' Then
    Return SetError(1, Default, 0)
    EndIf
    If $iPackLv < 1 Or $iPackLv > 9 Or Not StringRegExp($sPackType, '7z|zip|wim|tar') Then
    Return SetError(2, Default, 0)
    EndIf
    If $sAdditionalCommands <> '' Then
    $sAdditionalCommands = ' ' & $sAdditionalCommands
    EndIf
    If $fPack Then
    $sCommand = ' a "' & $sDestination & '" "' & $sSource & '" -t' & $sPackType & ' -mx=' & $iPackLv & $sAdditionalCommands
    Else
    $sCommand = ' x -o"' & $sDestination & '" "' & $sSource & '"' & $sAdditionalCommands
    EndIf
    If StringInStr(FileGetAttrib($sSource), 'D') Then
    $iSize = DirGetSize($sSource)
    Else
    $iSize = FileGetSize($sSource)
    EndIf
    $hTimeBefore = TimerInit()
    $iPID = Run($s7ZipEXE & ' ' & $sCommand, @TempDir, @SW_HIDE)
    While ProcessExists($iPID)
    $aProcessStats = ProcessGetStats($iPID, 1)
    If $aProcessStats = 0 Then
    SetError(3, Default, 0)
    EndIf
    Sleep($iUpdateRate)
    WEnd
    Return SetExtended(TimerDiff($hTimeBefore), $s7ZipEXE & ' ' & $sCommand)
    EndFunc

    [/autoit]


    Die Fehlerbehebung müsste noch explizit eingearbeitet werden :)
    Die 7zG.exe muss im gleichen Verzeichnis wie das Programm sein.

    • Offizieller Beitrag

    Kanashius:

    Das Hochzählen und Überwachen der Variable $UnZipTime mittels AdlibRegister kannst du dir ersparen. Das geht eleganter mit einer Static-Variablen:

    Spoiler anzeigen
    [autoit]

    ;~ global $UnZipTime=0

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

    Func Unzip($path,$tempPath=@TempDir)
    Local Static $UnZipTime = 0
    $UnZipTime += 1
    If $UnZipTime = 30 Then
    $UnZipTime = 0
    ProcessClose("7zG.exe")
    Return SetError(1,0,-1)
    EndIf
    ;~ AdlibRegister(observateZip(),1000)
    _7ZipProgress("7zG.exe", $path, $tempPath, false)
    If @error Then Return SetError(2,@error,0) ; Fehler von _7ZipProgress() als @extended-value
    ;~ AdlibUnRegister(observateZip())
    Return 1
    EndFunc

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

    Func zip($path,$OutPath)
    $ar=StringSplit($OutPath,".")
    _7ZipProgress($s7ZipEXE, $path, $OutPath, True, $ar[UBound($ar)-1])
    return 1
    EndFunc

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

    ;~ Func observateZip()
    ;~ $UnZipTime+=1
    ;~ if $UnZipTime=30 then
    ;~ ProcessClose("7zG.exe")
    ;~ endif
    ;~ EndFunc

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

    ; .....

    [/autoit]


    In der Funktion _7ZipProgress() machst du eine Fehlerbehandlung aber ohne Return ;) - ich nehme an, einfach vergessen.

    Spoiler anzeigen
    [autoit]

    While ProcessExists($iPID)
    $aProcessStats = ProcessGetStats($iPID, 1)
    If $aProcessStats = 0 Then
    ;~ SetError(3, Default, 0) <<<<== so passiert nix ;)
    Return SetError(3, Default, 0) ;<<<<== sicher so gemeint
    EndIf
    Sleep($iUpdateRate)
    WEnd

    [/autoit]
  • BugFix
    Ich hatte das ganze aus nem anderen Programm von mir und da wurde die Zählervariable noch anderweitig benutzt. Deshalb global :).Was ich bei deiner Änderung nicht verstehe ist, wie der Überwachen soll, dass das Programm schon seit X (->30) Sekunden läuft. Du zählst ja, bevor das entpacken gestartet wird. An sich dient die Funktion dazu, das Entzippen nach 30 Sekunden abzubrechen. Hat den Hintergrund, dass der, wenn er beim Entpacken scheitert, ewig weiterläuft, da die 7zg.exe als Prozess bestehen bleibt. Dadurch würde das Programm dann ja auch nicht weiterlaufen. Deshalb wird der Prozess nach 30 Sekunden beendet, wenn er bis dahin noch nicht fertig ist. (ich hatte nur kleine Zip-Dateien, weshalb das meist nur 2-3 Sekunden dauerte. Eventuell kann man das ja mit der Größe der Zip-Datei verrechnen.)

    Die _7zipProgress() war nicht von mir. Hab nur vergessen, wo sie herkam :D.
    (War gestern nicht so extrem motiviert, nen neues entpacken zu schreiben :whistling: )

    Aber danke für die Hinweise :thumbup:

  • Hallo,

    suchst du noch jemanden?

    Hallo und bitte entschuldige die ewig verspätete Antwort. Hab vergessen das Thema zu abonieren und bekam daher keine Antwortmail. Mein Fehler.
    Ja, ich suche dafür noch jemanden. Wäre klasse, wenn es noch klappen würde.