Script Sorter

  • Ich habe ein Idee was glaube jedenfalls ich zu Guten des ganzen Forums kommt : Der Script Sorter.
    Er sollte durchwirbelte Skripte sortieren.
    1.Includes
    2. Funktionen

    • Variablen
    • Rest der Funktion

    Ich habe auch schon angefangen :

    Spoiler anzeigen
    [autoit]

    #include <GuiConstantsEx.au3>
    #include <Array.au3>
    #include <File.au3>
    _Settings()
    Func _Settings()
    $Settings_GUI=GUICreate("ScriptSorter v1.0.0",300,150)
    GUISetState()
    $Group1 = GUICtrlCreateGroup("Einstellungen",2,2,290,100)
    $Checkbox1 = GUICtrlCreateCheckbox("Komplettes Skript sortieren",10,20)
    $Checkbox2 = GUICtrlCreateCheckbox("Backup erstellen",10,45)
    $Start = GUICtrlCreateButton("Starten",75,125,150)
    While 1
    $msg=GUIGetMsg()
    Select
    Case $msg=$GUI_EVENT_CLOSE
    Exit 1
    Case $msg=$Start
    Global $Check1 = GUICtrlRead($Checkbox1)
    Global $Check2 = GUICtrlRead($Checkbox2)
    GUIDelete($Settings_GUI)
    Global $File = FileOpenDialog("Datei auswählen",@DesktopDir,"(*.au3)")
    _Sort()
    EndSelect
    WEnd
    EndFunc
    Func _Sort()
    If $Check2 <> 4 Then
    FileCopy($File,@ScriptDir&"\_backup\"&$File)
    EndIf
    $Readed_Script = _ScriptRead($File)
    Dim $Includes[1]
    $Includes[0] = ""
    Dim $Funcs[1]
    $Funcs[0] = ""
    For $i = 1 to Ubound($Readed_Script,1)-1
    If StringInStr($Readed_Script[$i],"#include") Then
    _ArrayAdd($Includes,$Readed_Script[$i])
    EndIf
    Next
    For $i = 1 to Ubound($Readed_Script,1)-1
    If StringInStr($Readed_Script[$i],"Func _") Then
    $Turn = ""
    $Start = 0
    $Ende = 0
    $Start = $i
    For $z = $i to Ubound($Readed_Script,1)-1
    If StringInStr($Readed_Script[$z],"EndFunc") Then
    $Ende = $z
    ExitLoop
    EndIf
    Next
    For $l = $Start to $Ende
    If $Turn = "" Then
    $Turn = $Readed_Script[$l]
    Else
    $Turn = $Turn&@CRLF&$Readed_Script[$l]
    EndIf
    Next
    $i = $Ende + 1
    _ArrayAdd($Funcs,$Turn)
    EndIf
    Next
    _ArrayDisplay($Readed_Script)
    For $i = 1 to Ubound($Includes,1)-1
    FileWriteLine(@ScriptDir&"\"&"skript.au3",$Includes[$i])
    Next
    For $i = 1 to Ubound($Funcs,1)-1
    FileWrite(@ScriptDir&"\"&"skript.au3",$Funcs[$i]&@CRLF)
    Next
    Exit 1
    EndFunc
    Func _ScriptRead($f_File)
    $Lines = _FileCountLines($f_File)
    Dim $Return[1]
    $Return[0] = ""
    For $i = 1 to $Lines
    $Line = FileReadLine($f_File,$i)
    _ArrayAdd($Return,$Line)
    Next
    Return $Return
    EndFunc

    [/autoit]

    Ich hoffe es werden mir viele helfen möchten :) da es denke ich in der Interesse des ganzen Forums ist sortierte und nicht durchgewirbelte Skripte zu sehen.

    mfg nof@ker

  • Hallo nof@ker2

    Ja, das Problem das die Includes überall sein könnten habe ich so gelöst:

    Spoiler anzeigen
    [autoit]


    #include <file.au3>

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

    $file = FileOpen("muster.au3", 0)
    $new = "new_new.au3"

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

    If FileExists($new) Then
    FileDelete($new)
    EndIf

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

    FileOpen($new, 0)
    $aus1file = FileOpen("muster_neu1.au3", 1)
    $aus2file = FileOpen("muster_neu2.au3", 1)

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

    $zeilen = _FileCountLines("muster.au3")

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

    If $file = -1 Then
    MsgBox(0, "Fehler", "Die Datei konnte nicht geöffnet werden.")
    Exit
    EndIf

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

    $i = 0
    Do
    if StringInStr((FileReadLine($file,$i)), "#include <") > 0 OR StringInStr((FileReadLine($file,$i)), "#include<") > 0 Then
    $zwischen = FileReadLine($file,$i)
    FileWriteLine($aus1file, $zwischen & @CRLF)
    ElseIf StringInStr(FileReadLine($file,$i), "#include <") = 0 OR StringInStr(FileReadLine($file,$i), "#include<") = 0 Then
    $zwischen = FileReadLine($file,$i)
    FileWriteLine($aus2file, $zwischen & @CRLF)
    EndIf
    $i = $i + 1
    Until $i = $zeilen +5

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

    FileClose($file)
    FileClose($aus1file)
    FileClose($aus2file)
    Sleep(5000)
    FileWrite($new, FileRead("muster_neu1.au3"))
    FileWrite($new, FileRead("muster_neu2.au3"))
    Sleep(1000)
    FileClose($new)
    FileDelete("muster_neu1.au3")
    FileDelete("muster_neu2.au3")
    Exit

    [/autoit]

    Bevor:

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 135, 61, 193, 125)
    #include <EditConstants.au3>
    $Input1 = GUICtrlCreateInput("Input1", 8, 8, 121, 21)
    $Button1 = GUICtrlCreateButton("Button1", 8, 32, 123, 25, 0)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###
    #include <GUIConstantsEx.au3>
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    $inpu1 = GUICtrlRead ($input1)
    _FileWriteLog(@ScriptDir & "\avc.log", "Internet Seite : "&$inpu1)
    MsgBox (0,"HALLO","Hallo")

    EndSwitch
    WEnd
    #include <WindowsConstants.au3>
    #include <file.au3>

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

    After:

    Spoiler anzeigen
    [autoit]


    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <file.au3>

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 135, 61, 193, 125)
    $Input1 = GUICtrlCreateInput("Input1", 8, 8, 121, 21)
    $Button1 = GUICtrlCreateButton("Button1", 8, 32, 123, 25, 0)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    $inpu1 = GUICtrlRead ($input1)
    _FileWriteLog(@ScriptDir & "\avc.log", "Internet Seite : "&$inpu1)
    MsgBox (0,"HALLO","Hallo")

    EndSwitch
    WEnd

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

    Mann könnte das Script auch dazu benutzen, am Anfang zum Beispiel noch etwas vor die Includes zu schreiben (Informationen / Gebrauchsanweiseúngen).
    Dazu vor Zeile 41 noch eine weitere Datei (die na klar richtig aufgebaut sein muß) in die $new schreiben lassen.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • @nof@ker2:
    Hallo nette Idee.

    1) Einige meiner (wahrscheinlich anderer Leute auch) Programme wären danach aber Müll :D
    z.B:

    [autoit]


    #include <beispiel.au3>
    #include <irgendwelcheGUIConstanten.au3>

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

    #include "MeinGUI.au3"
    ;msgLoop
    #include "MeineFunktionenTeil1.au3"
    ;usw.

    [/autoit]

    Nach dem Sortieren wäre das:

    [autoit]

    #include "MeinGUI.au3"
    #include "MeineFunktionenTeil1.au3"
    #include <beispiel.au3>
    #include <irgendwelcheGUIConstanten.au3>

    [/autoit]


    da geht dann nichts mehr, da die Constanten die für "MeinGUI" nötig wären, zu spät eingebunden werden.
    Das Ergebnis wären ca. 100000 Fehlermeldungen von Au3Check ... :D

    Lösung: evtl. nur die #include <> sortieren?

    2) Deine Funktion _ScriptRead: Ist das nicht das gleiche wie _FileReadToArray?

    3) Warum ist nur eine Zeile in der "irgendwo" (StringInStr) "Func _" steht eine Funktion?
    Was ist mit?

    [autoit]


    Func BlaLaber()
    EndFunc

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

    func _blalaber1()
    endfunc

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

    ; Description ...: Func _BlaLaber2 hat die Funktion ....
    Func __BlaLaber2()
    EndFunc

    [/autoit]


    hier besser mit ner RegEx arbeiten, sonst wird im obigen Beispiel:
    - keine Funktion gefunden
    - der Kommentar auch sortiert

    4) Warum überhaupt?
    OrganizeIncludes in SciTe ( bzw. Include_AutoInsert in jEdit4AutoIt) Tidy und der Wrapper erledigen das doch auch schon ... außer Variablen sortieren, wobei ich mir das nun relativ schwierig vorstelle, nach welchen Kriterien willst du gehen, wenn du (Deklarationen von) Variablen "sortierst".

  • vielen dank an euch beiden :) @ Alina ich werde deine Idee übernehmen .. :) und ich suche immernoch Mitarbeiter :D :(

    mfg nof@ker

  • @nof@ker2
    Meine Version arbeitet soweit ich sehen kann zwar einwandfrei, aber dennoch sicherlich für einige User hier "Verbesserungswürdig".

    Stilgar
    Wie schaut es mit meiner Version aus? Kann ich danch Deiner Meinung da weiter arbeiten oder gibt das auch "Chaos" in einigen Scripten?

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl


  • Stilgar
    Wie schaut es mit meiner Version aus? Kann ich danch Deiner Meinung da weiter arbeiten oder gibt das auch "Chaos" in einigen Scripten?

    Wenn man sich beim programmieren bewußt ist, daß "includes" erst im Scriptverzeichnis gesucht werden und sich auch daran hält, darf da nichts passieren.
    Nur vielleicht auch die #include Zeile etwas anderst suchen z.B mit RegEx.

    "^[ \t]*#include[ \t]*[<]"

    dann ist es wirklich eindeutig eine Zeile mit include (vorher natürlich mit StringLower noch umwandeln).

  • @ Alina : willst du mir jetzt helfen ? :D Ich will dir nichts aufdrängen xD ^^ Ist nur eine Frage :)

    mfg nof@ker

  • @ Alina : willst du mir jetzt helfen ? :D Ich will dir nichts aufdrängen xD ^^ Ist nur eine Frage :)

    Zur Zeit habe ich derzeitig zu viel um meine beiden kleinen Ohren. Aber wenn Du hier postest, dann helfe ich na klar weiter. Ehrensache ;)

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • hi finde schon ma diesen "skript sortierer" sehr hilfreich :)
    doch da man wohl noch etwas verbessern kann !könnte nich jemand das vollständige skript hoch laden :D
    (ich meine die verbesserte version)

    • Offizieller Beitrag

    hi finde schon ma diesen "skript sortierer" sehr hilfreich :)
    doch da man wohl noch etwas verbessern kann !könnte nich jemand das vollständige skript hoch laden :D
    (ich meine die verbesserte version)


    Ich weiß ja nicht wo du gelesen hast, das es eine bessere Version gibt . Vielleicht schreibst du ja eine :D

  • nein :P
    es haben doch schon ein paar leute das skript verbessert oder nich ? ( z.b Alina )
    und ich meine das skript das schon ein wenig verbessert wurde :|

  • @FunH@cker
    Also das ist ja schon mehr als nur bequem. Kennst Du Copy & Paste? Das solltest Du schon selber hin bekommen.

    Na klar helfe ich beim verbessern, aber derzeitig ist eine verbesserte Version noch gar nicht hier gepostet, sondern nur die o. g. Versionen.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl