Anfänger benötigt Hilfe

  • Hallo alle zusammen.

    Stehe vor einem Problem (Typischer Anfänger)
    möchte über eine GUI Programme von portableapps.com in ein eigenes Startmenu installieren.
    Klappt soweit alles ganz gut,bis auf..... jepp, nun das Problem:

    Die Programme werden alle in ein von mir vorgegebenes Verzeichnis installiert (klappt schon mal) :)
    Wie kann ich nun aber feststellen, welcher Ordner neu in meinem festgelegten Ordner angelegt wurde?

    Nach langem Suchen liegt die Lösung wohl in Arrays (wovon ich null Ahnung habe)

    Mein Gedankengang sieht wie folgt aus (bitte korrigieren falls ich falsch liege):

    1) Die Ordnernamen mit _FileListToArray (???) einlesen, bevor ein weiteres portables App installiert wird.
    2) Nun das portable App installieren lassen (wodurch dann ein neuer Ordner entsteht)
    3) nach der installation des neuen Apps (und damit neuen Ordners) erneut die Ordnernamen einlesen
    4) anhand der beiden einlesevorgänge ermitteln welcher Ordner neu hinzugekommen ist
    5) den ermittelten Ordnernamen in eine Variable schreiben, mit der man dann weiterarbeiten kann.
    Wie kann ich meine Gedankengänge realisieren?

    Wie geschrieben hab ich noch nicht viel Erfahrung, aber mit learning by doing schon kleine Erfolge erzielt.
    Doch hier scheine ich auf dem Schlauch zu stehen :(

    Danke schon mal für Eure Hilfe

    Einmal editiert, zuletzt von Diggidie (24. April 2009 um 19:30)

  • @ Diggidie

    Erst einmal WILLKOMMEN.

    Also Du hast bereits etwas gepostet? Schön, dann laß uns teilhaben, damit wir helfen können und besonders dieses anhand dem was Du geschrieben hast, wo Du Probleme hast. ;)

    Wie machst Du es mit Programmen, die keine Portableapps Installation haben und diese auch gar nicht benötigen. Ich habe z. B. ein Tool mit dem ich für 4 Cent SMS versende auf meinem Stick und das ganze geht ohne Portableapps. Auch dieses solltest Du evtl. bedenken.

    Aber den Ablauf so wie Du ihn beschrieben hast schein logisch. Habe bischen Geduld und evtl. kommen dann die Hilfestellungen. Kann bischen dauern, da Du ja einiges ansprichst.

    Ich habe vergessen darum zu bitten, beim nächsten mal eine eideutige Themenbezeichnung zu wählen. Das Du Hilfe benötigst, davon gehen wir alle aus. In diesem aktuellen Beispiel wäre "Portableapps Problem" evtl. passender gewesen. ;)

    Lieben Gruß,
    Alina

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

    Geheime Information: ;)
    k3mrwmIBHejryPvylQSFieDF5f3VOnk6iLAVBGVhKQegrFuWr3iraNIblLweSW4WgqI0SrRbS7U5jI3sn50R4a15Cthu1bEr

  • @ Alina
    Danke für Deinen Hinweis zur Themenbezeichnung, werde beim nächsten mal darauf achten.

    Bin dabei, mir nen eigenen Programmstarter zu basteln. das mit der installation der portablen Apps
    mit der Endung .paf.exe soll ein Extra im Programm werden, damit man es nicht von Hand installieren
    muß. das Erfassen anderer Apps stellt kein Problem dar. Es geht mir darum, das App nach der installation
    automatisch zu erfassen und in mein ListView einzufügen. Dazu benötige ich aber den Ordnernamen des
    neuen Apps.

  • kann mich Alina nur anscließen

    aber ich finde doch das schon für den anfang bissel heftig gebe ich ehrlich zu hääte ich nie hinbekommen will damit nicht sagen das du es auch nicht hinbekommest knn ja sein du schaffst es aber
    zu empfehl ist doch mit was kleinem anzufangen.......

    klar deine gedanken stimm muss ich auch sagen aber.. liegt es daran das ich jetz fauel oder zu müde bin oder beides?

    schlagartig fällt mir nicht ein wie der vergleich ausehen soll?

    Mom hat glaub klick gemacht^^

    die zahl aus $array[0] müsste ja die nummer des neusten ordner sein dan müsstest du garnix vergleichen ^^

  • @Matthias 199

    ??? die zahl aus $array[0] müsste ja die nummer des neusten ordner sein dan müsstest du garnix vergleichen ???

    Wie müßte ich das anwenden? Hab von Arrays noch keinen Plan

    Anhand der ganzen Beispiele kann man hier doch viel lernen. Ein fettes Bravo an alle.
    Und habe im Moment, krankheitsbedingt viel Zeit zum erlernen von AutoIT.

  • also ein arry ist nix anderes als eine varibale die durchnummerriert ist.

    der sind ist kp^^ kenne ihn net ich hab es zu beispiel neulich benutz um mit der selben funktion 9 mal pingen zu können auch egal

    probier mal den gesuchten ordner zu finden in dem du

    [autoit]

    $Ordner =_FileListToArray ( $sPath [, $sFilter [, $iFlag]] )
    $Ordner[0] ;anzahl der ordner
    msgbox(0,"","die anzahl der ordner ist : "&$Ordner[0])
    $Ordner[$Ordner[0]] ; der letze ordner wenn es 10 ordner sind ist der letze die nummer 10
    msgbox(0,"","Der neue ordner ist : "&$Ordner[$Ordner[0]])

    [/autoit]


    Mach das befor der neue ordner erschaffen wird und dan danach .
    Danach müsste der neu erschaffener odner als name angezeigt werden

    • Offizieller Beitrag

    Da du noch kein Ahnung von Array hast würe ich dir raten mal das ArrayTut von BugFix anzuschauen http://www.bug-fix.info/array_tut.htm .

    @Matthias_199 in $array[0] steht nicht der neue Eintrag sondern bestenfalls die Anzahl der enthaltenen Elemente,

    • Offizieller Beitrag

    matthias_199 dir würde ich auch zum ArrayTut raten . Wenn du den unterschied zwischen den Array vor und nach der Installation rausbekommen willst, dann mußt du die Array´s vergleichen. Und zu ArrayFragen wendet ihr euch am besten an BugFix , er liebt Array´s. Wenn ihr höflich fragt wird er euch sicher helfen ;)

    • Offizieller Beitrag

    Einen Vergleich (vorher -> nachher) könnte man so machen (Ergebnis ist ein Array mit allen neuen Verzeichnissen):

    [autoit]


    #include <Array.au3>
    #include <File.au3>
    $aPrev = _FileListToArray(@ScriptDir, '*.*', 2)
    _ArrayDisplay($aPrev) ; Anstelle dieser Zeile kommt die Installation des Programms
    $aNow = _FileListToArray(@ScriptDir, '*.*', 2)
    $aOut = _ArrayDiff($aNow, $aPrev)
    _ArrayDisplay($aOut)

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

    Func _ArrayDiff(ByRef $aNow, ByRef $aPrev)
    Local $sDiff = '', $Tmp
    For $i = 1 To UBound($aNow) - 1
    $Tmp = True
    For $j = 1 To UBound($aPrev) - 1
    If $aNow[$i] = $aPrev[$j] Then
    $Tmp = False
    ExitLoop
    EndIf
    Next
    If $Tmp Then $sDiff &= $aNow[$i] & '|'
    Next
    Return StringSplit(StringTrimRight($sDiff, 1), '|', 2)
    EndFunc

    [/autoit]
  • @ Oscar

    Vielen Dank für Dein Beispiel (und das um 04:33Uhr). Hab es mal so übernommen. Klappt prächtig, erfüllt
    genau den Zweck wie ich es meinte.

    !!! Weltklasse !!! :thumbup:

    Hab das mit den Arrays zwar immer noch nicht so genau kapiert, aber das wird schon noch (hoffe ich).

    Toll würde ich es finden, wenn jemand die Func "_ArrayDiff" mal für mich und andere Anfänger Zeile für Zeile
    kommentieren könnte (hätte bestimmt einen guten Lerneffekt, da bin ich mir sicher).

    Nochmals Danke an alle, und macht weiter so.

    • Offizieller Beitrag

    Hier die kommentierte Version der Funktion:

    [autoit]


    Func _ArrayDiff(ByRef $aNow, ByRef $aPrev)
    Local $sDiff = '', $Tmp
    For $i = 1 To UBound($aNow) - 1 ; Schleife, um alle Elemente des Arrays $aNow durchzugehen
    $Tmp = True ; Vergleichsvariable, ob der Inhalt des Elements $aNow[$i] im Array $aPrev vorhanden ist
    For $j = 1 To UBound($aPrev) - 1 ; Schleife für alle Elemente des zweiten Arrays ($aPrev)
    If $aNow[$i] = $aPrev[$j] Then ; hier kommt der Vergleich, ob das aktuelle Element von $aNow mit einem der Elemente des zweiten Arrays übereinstimmt
    $Tmp = False ; Wenn ja, dann die Vergleichsvariable auf False
    ExitLoop ; und die For $j Schleife verlassen
    EndIf
    Next
    If $Tmp Then $sDiff &= $aNow[$i] & '|' ; Wenn die Vergleichsvariable = True (Array-Element aus $aNow ist nicht in Array $aPrev vorhanden), dann das Element in die Ausgabevariable übernehmen.
    Next
    Return StringSplit(StringTrimRight($sDiff, 1), '|', 2) ; hier wird die Ausgabevariable anhand der Trennmarkierungen in ein Array aufgesplittet und an die aufrufende Funktion zurückgegeben.
    EndFunc

    [/autoit]