Pfad eines geöffneten Projects auslesen

  • Guten Morgen liebes Forum,

    ich würde gerne den Pfad des "Recent projects" auslesen

    [Blockierte Grafik: http://img22.imageshack.us/img22/8907/recentprojects.jpg]

    Die Tastenkombination dafür ist
    ALT+f
    pfeil runter
    pfeil runter
    pfeil runter
    pfeil rechts

    dann sieht es so aus wie auf dem Bild. Nur ich kann den Pfad nicht einlesen.
    Gibt es dafür eine elegantere Art?
    Irgendwo muss doch der Pfad auszulesen sein.

    Vielen Dank
    Michael

    Einmal editiert, zuletzt von Michael_Scott (8. September 2010 um 17:59) aus folgendem Grund: Problem gelöst, klasse Forum

  • Wie Schnitzel nun mittlerweile schon gesagt hat - dort stehen die Pfade.
    Hier noch ein Beispiel zum Auslesen dieser XML-ähnlichen Syntax:

    Spoiler anzeigen
    [autoit]

    #include "Array.au3"

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

    ; Öffne Datei in der die Pfade gespeichert sind und lese sie in eine Variable
    $aRead = FileRead(@AppDataDir & "\codeblocks\default.conf")
    If @error Then Exit

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

    ; Filtere die Informationen aus dem Gesamtstring mit Hilfe eines regulären Ausdrucks:
    $aRegExp = StringRegExp($aRead, "(?s)<RECENT_PROJECTS>.+?<!\[CDATA\[([^\]]+?)\].+?</RECENT_PROJECTS>", 3)
    ; (Bedeutet zusammengefasst prinzipiell nichts weiter als gib alles zurück was innerhalb von <![CDATA[ und ] steht was wiederum innerhalb von <RECENT_PROJECTS> und </RECENT_PROJECTS> stehen muss

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

    ; Zeige das Ergebnis an:
    _ArrayDisplay($aRegExp)

    [/autoit]
  • EDIT: Hat sich erledigt, kann sie jetzt doch auslesen, danke
    nur der StringRegExp liefert mit noch nichts, obwohl ein Projekt vorhanden sein müsste.

    bräucht nochmal bischen hilfe bei einem anderen StringRegExp Ausdruck

    von so einem aufgebauten Code

    bräuchte ich diesen diesen String

    Code
    ..\..\..\..\version\v04_03\eeprom_config.h


    Aber der kann unterschiedlich lang sein, mit anderen Worten
    ich brauch das was zwischen dem

    Code
    filename="

    und dem

    Code
    eeprom_config.h

    steht.
    Ich bekomme es leider NOCH NICHT hin

    diese Variante kommt auch vor, die brauche ich aber nicht

    Code
    <Unit filename="..\..\..\..\..\bios\B03_1520\src\LLT\EEPROM\ba_llt_eeprom_config.h" />


    Vielen Dank
    Michael

    3 Mal editiert, zuletzt von Michael_Scott (8. September 2010 um 10:02)

  • So zb?

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    $string = "</Unit>" & @CRLF & _
    "<Unit filename=""..\..\..\..\version\v04_03\eeprom.h"" />" & @CRLF & _
    "<Unit filename=""..\..\..\..\version\v04_03\eeprom_config.h"" />" & @CRLF & _
    "<Unit filename=""..\..\..\..\version\v04_03\eeprom_x.h"" />" & @CRLF & _
    "<Unit filename=""..\..\..\..\version\v04_03\fahroben.c"">" & @CRLF & _
    "<Option compilerVar=""CC"" />" & @CRLF & _
    "</Unit>" & @CRLF & _
    "<Unit filename=""..\..\..\..\version\v04_03\fahroben.h"" />" & @CRLF & _
    "<Unit filename=""..\..\..\..\version\v04_03\fehler.c"">" & @CRLF & _
    "<Option compilerVar=""CC"" />" & @CRLF & _
    "</Unit>"
    MsgBox(0,"",$string)

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

    $test = StringRegExp($string,"(?<=<Unit filename=)(.*)eeprom_config.h"" />",3)
    _ArrayDisplay($test)

    [/autoit]
  • ja, das klappt, jetzt hab ich
    "..\..\..\..\version\v04-03, da ist am Anfang noch das Anführungszeichen zuviel, oder kommt das durch die AutoIt Formatierung der Strings mit " darin enthalten

    wie kann ich das $test in einer MsgBox anzeigen?

    [autoit]

    MagBox(0, "", $test)

    [/autoit]


    EDIT:

    [autoit]

    MagBox(0, "", $test[0])

    [/autoit]


    OK, kapiert

    Vielen Dank
    Michael

  • Oder alternativ auch so:

    [autoit]

    $sText = _
    '</Unit>' & @CRLF & _
    '<Unit filename="..\..\..\..\version\v04_03\eeprom.h" />' & @CRLF & _
    '<Unit filename="..\..\..\..\version\v04_03\eeprom_config.h" />' & @CRLF & _
    '<Unit filename="..\..\..\..\version\v04_03\eeprom_x.h" />' & @CRLF & _
    '<Unit filename="..\..\..\..\version\v04_03\fahroben.c">' & @CRLF

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

    $aRet = StringRegExp($sText, 'filename="([^"]+\\)eeprom.h', 1)
    If Not @error Then MsgBox(0, "", $aRet[0])

    [/autoit]
  • also bei meinem Beispiel kannst die " wegbekommen indem du einfach hinter filename= noch "" anhängst.
    ausgeben kannst es wie SEuBo mit MsgBox(0,"", $test[0])
    Die gefundenen Ergebnisse werden halt in einem Array gespeichert ...
    EDIT
    bei meiner version sollte ncoh \\ vor eeprom_config.h eingefügt werden damit er den andern nicht findet
    also :

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    $string = "</Unit>" & @CRLF & _
    "<Unit filename=""..\..\..\..\..\bios\B03_1520\src\LLT\EEPROM\ba_llt_eeprom_config.h"" />" & @CRLF & _
    "<Unit filename=""..\..\..\..\version\v04_03\eeprom.h"" />" & @CRLF & _
    "<Unit filename=""..\..\..\..\version\v04_03\eeprom_config.h"" />" & @CRLF & _
    "<Unit filename=""..\..\..\..\version\v04_03\eeprom_x.h"" />" & @CRLF & _
    "<Unit filename=""..\..\..\..\version\v04_03\fahroben.c"">" & @CRLF & _
    "<Option compilerVar=""CC"" />" & @CRLF & _
    "</Unit>" & @CRLF & _
    "<Unit filename=""..\..\..\..\version\v04_03\fahroben.h"" />" & @CRLF & _
    "<Unit filename=""..\..\..\..\version\v04_03\fehler.c"">" & @CRLF & _
    "<Option compilerVar=""CC"" />" & @CRLF & _
    "</Unit>"
    MsgBox(0,"",$string)

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

    $test = StringRegExp($string,"(?<=<Unit filename="")(.*)\\eeprom_config.h"" />",3)
    _ArrayDisplay($test)

    [/autoit]

    Einmal editiert, zuletzt von Kijan (8. September 2010 um 11:07)

  • @SEuBo ,danke, dein funktioniert auch,

    kann man da sagen, was fehleranfälliger ist? wenn z.B verschiedene Variationen auftauchen, z.B.

    Code
    <Unit filename="..\..\..\version\v04_03\eeprom_config.h"  />
    <Unit filename="..\version\v04_03\eeprom_config.h"  />
    <Unit filename="\..\..\..\..\..\version\v04_03\eeprom_config.h"  />
    <Unit filename="..\..\..\..\Version\v04_03\eeprom_config.h"  />
    <Unit filename="..\..\..\..\version\v005_03\eeprom_config.h"  />


    ...
    ich werd man schaun, ob ich nen fehler so erzeugen kann
    Danke

  • naja Fehleranfälliger weis nicht^^
    bei mir findet er laut Hilfe: Findet jedes einzelne Zeichen (außer Zeilenschaltungen).
    und bei SEuBo findet er alles was kein " ist.
    Das einzige was den unterschied macht ist, wenn in deiner datei nen zeilenumbruch drin ist, kann es passieren das SEuBos den Zeilenumbruch mit liest und bei meiner Variante dürfte er da aufhören... ich teste es mal
    aber sonst dürfte nicht so groß der unterschied da sein

    EDIT
    ja bei seiner Variante findet er auch sowas:
    "..\..\
    ..\..\version\v04_02
    \eeprom_config.h"

    bei meiner Variante nicht...

    dafür würde er bei mir sowas finden:
    "..\..\"..\..\version\v04_02"\eeprom_config.h"

    also " in dem String
    welches bei seiner Variante nicht gefunden werden dürfte

    was natürlich nich so viel sinn macht, sowas in der datei zu haben aber naja

    2 Mal editiert, zuletzt von Kijan (8. September 2010 um 11:18)

  • wenn ich bei SEuBo's den String verkürze, so z.B.

    Code
    <Unit filename="\..\..\version\v04_03\eeprom_config.h"  />


    kommt bei mir trotzdem der lange String heraus, trotz aktualisieren....

    Code
    <Unit filename="\..\..\..\..\..\version\v04_03\eeprom_config.h"  />


    EDIT:
    jetzt klappts ????

    kann ich dich/euch später nachmal nach einem StringRegEx Muster fragen, muss es aber erst noch finden?

  • kann ich dich/euch später nachmal nach einem StringRegEx Muster fragen, muss es aber erst noch finden?


    Also mich jederzeit, und da Kijan ja laut eigener Aussage momentan krank ist, hat er wohl auch genug Zeit ^^

    Übrigens: https://autoit.de/index.php?page=Thread&amp;threadID=19071
    Vielleicht interessiert's dich ja ;)

  • Hallo,
    nochmal zu meiner Frage am Anfang.
    Diese default.conf die von dem Programm erstellt wird enthält wie schonmal gesagt die zuletzt geöffneten Projekte. Das ist aber nicht immer so, momentan sieht der Inhalt so aus.

    Code
    RECENT_FILES>
    	<astr />
    </RECENT_FILES>
    <RECENT_PROJECTS>
    	<astr />
    </RECENT_PROJECTS>

    obwohl ein Projekt geöffnet ist. Das ist jetzt zwar das falsche Forum, aber ich frag trotzdem mal.
    Wie werden solche config-Dateien aktualisiert? Wenn ich ein neues Projekt öffne, muss doch dieses sofort in die config-Datei eingetragen werden, woher hat sonst das Programm die Information, muss ja irgendwo gelesen werden???? trotzdem steht bei mir momentan nix drin, trotz aktualisieren...

    Kenns sich da jemand besser aus?

  • eigentlich müsste sobald ein neues projekt geöffnet wird eine funktion ausgeführt werden, die die config öffnet, neue parameter reinschreibt und dann wieder schließt???

    aber windows schreibt doch auch viel in chash's rein um sich das laden zu sparen, so wie bei .ico z.B.
    hmmm k.A.

    gibt es keinen @???? Befehl, der den Pfad eines im Fokus stehenden Fensters lesen kann?

    Danke
    Klasse Forum