Pfad und Dateiname aus Variablen zusammenbauen

  • Hallo,

    ich möchte über ein kleines Programm eine Datei öffnen.

    Ich gebe dazu drei Variablen ein.

    $gem : vierstellige Zahl

    $fl : dreistellige Zahl

    $flst: fünfstellige Zahl.

    Die Dateien sind folgendermaßen formatiert:

    3038_N_010_00002.TIF

    gem = 3038

    fl = 010

    rnr = 00002

    wenn ich diese Zahlen in meine Felder eingebe, wirft er mir für die Variable gem die 7 aus und für fl die 8.

    Wie kommt das?

    2. Frage,

    die Datei liegt entweder als TIF oder als jpg vor. Was muss ich in den Pfad eintragen um das unabhängig von der Dateiendung zu machen

  • 1. Du verwendest die Variable $rnr garnicht, sondern deklarierst sie nur, vermutlich willst du den Inhalt des Editfeldes $flst

    2. In den Variablen $gem, $fl und $flst sind nicht die Werte gespeichert, welche du in das Edit einträgst, sondern die ControlID, also eine eindeutige ID mit der du das GUI Control auslesen, bearbeiten oder auch verschieben kannst.

    3. Um den Inhalt eines Controls auszulesen verwendet man die Funktion guictrlread()

  • 3. Um den Inhalt eines Controls auszulesen verwendet man die Funktion guictrlread()

    So richtig?

  • Sagen wir mal besser.

    1. Es bringt dir nichts ein Edit Feld direkt nach der Erstellung auszulesen, denn da ist es ja noch leer. Du musst es schon auslesen nachdem der Benutzer etwas reingeschrieben hat (z.B. wenn er den "öffnen" Button drückt).

    2. Die Variable $idEditProjekt ist ebenfalls leer und ungenutzt, deine Zeilen zum Ändern der Schrift bringen also rein garnichts

  • OK, so funktioniert es.

    2. Problem: Wie mache ich mich von der Dateiendung unabhängig.

    Und mir war noch etwas weiteres aufgefallen:

    bei der 2. und 3. Eingabe muss ich eine Null vorstellen bzw. mit Nullen auffüllen. Wie kann ich bei der Eingabe von 2 auf 00002 stellen?

  • Hi kayes !

    Vorab, und sei mir bitte nicht böse ob dieses Kommentares :

    Das Ganze geht schon wieder in die Richtung, die wir in dem 100+ Beiträge langen Thread kopiertool (vor gut 2 Jahren) bereits hatten.

    Das Problem bestand u.a. , ähnlich wie hier, darin, dass Du Codeteile recht sportlich und ohne mal in die Hilfe zu schauen, zusammenkopierst.

    Diverse Punkte hat misterspeed ja bereits benannt.

    Desweiteren :

    Ich gebe dazu drei Variablen ein.

    $gem : vierstellige Zahl

    $fl : dreistellige Zahl

    $flst: fünfstellige Zahl.

    Um ein Skript nachvollziehbar zu machen, sind z.B. aussagekräftige Variablennamen überaus hilfreich.

    $gem, $fl und $flst sind diesbzgl. kein guter Start;).

    Bevor wir jetzt also wieder an einem von Beginn an 'verfrickelten' Skript herumbasteln, sollten wir schrittweise eine saubere Basis aufbauen. Ich kann mich noch gut daran erinnern, dass Du Teillösungen anderer User gerne per Copy&Paste in Dein Skript einbaust, ohne den Gesamtzusammenhang im Auge zu behalten.

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Da geb ich Musashi recht.

    Dennoch zu deinen Fragen:

    1. Um einen String zum Beispiel mit 0 aufzufüllen verwendet man die Funktion stringformat()

    Beispiel:

    AutoIt
    $sData = "2"
    $sDataFormated = StringFormat("%+03s",$sData)
    
    ConsoleWrite($sDataFormated & @CRLF)
    
    Exit

    2. Das Problem mit der Dateiendung könntest du komplett umgehen, wenn du statt irgendwelchen Edits und Usereingaben einfach einen FileOpenDialog() verwenden würdest. Hier kann der User dann einfach die gewünschte Datei auswählen.

    3. Falls du das weiterhin so tun möchtest verwende einfach if Bedingungen für beide Dateiformate

    Obiger Code ist natürlich grausam und kann auch massivst verkürzt werden, insbesondere wenn du noch mehr Dateiendungen abdecken willst macht das auf diese Art wenig Sinn.

    Einmal editiert, zuletzt von misterspeed (17. Februar 2021 um 22:00)

  • Böse bin ich nicht, obwohl der Hinweis, ich würde ja nicht in die Hilfe schauen meiner Meinung nach ein bischen unfair ist.

    Auch die Strukturierung finde ich eigentlich in Ordnung.

    Die Nutzung der Variablen gem (Gemarkung) fl (Flur) und rnr (Rissnummer) finde ich für mich sehr klar eigentlich. Für Aussenstehende vielleicht nicht so einfach.

    Fokussiere ich mich zu sehr auf das Ergebnis anstatt den Weg von Anfang bis zum Ende jeden Millimeter zu gehen?

    Wie bei den anderen Skripten auch, versuche ich mir die tägliche Arbeit zu erleichtern. Und für das, was ich hier jetzt geplant habe gibt es in unserer Bürosoftware keine Module.

    Ich nutze AutoIt um mit möglichst wenig Aufwand zu einem praktikablen Ergebnis zu kommen. So interessant das Programmieren auch ist, findet es bei mir sehr wenig statt, da ist es schwierig, sich immer wieder in diese Dinge reinzudenken.

    In der Vergangenheit hätte ich wohl des öfteren einmal etwas mehr Dankbarkeit an den Tag legen können.

  • Böse bin ich nicht, obwohl der Hinweis, ich würde ja nicht in die Hilfe schauen meiner Meinung nach ein bischen unfair ist.

    Da spielt wohl noch die Vorgeschichte aus dem Thread von 2018 und unsere Konversation eine Rolle.

    Dort gab es diverse Fragen, die mit einem kurzen Blick in die Hilfe hätten gelöst werden können.

    Dass Du grundsätzlich nicht in die Hilfe schaust, wollte ich damit nicht ausdrücken ;).

    Die Nutzung der Variablen gem (Gemarkung) fl (Flur) und rnr (Rissnummer) finde ich für mich sehr klar eigentlich. Für Aussenstehende vielleicht nicht so einfach.

    Dummerweise sind die Leute, die Dir helfen möchten, Außenstehende :P. Es bereitet doch keinen nennenswerten Mehraufwand, 'sprechende' Namen zu vergeben,

    Fokussiere ich mich zu sehr auf das Ergebnis anstatt den Weg von Anfang bis zum Ende jeden Millimeter zu gehen?

    Zum Teil, Ja.

    Um es noch mal deutlich zu sagen : Niemand hat das Bedürfnis Dich herunterzumachen - es sind gut gemeinte Ratschläge :!:.

    Gruß Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • 2. Problem: Wie mache ich mich von der Dateiendung unabhängig.

    FileFindFirstFile/FileFindNextFile oder _FileListToArray - du suchst dann nach Dateien mit Dateiendung .* und bist so auch nicht gezwungen, alle im Universum existierenden Dateiendungen in dein Script zu tippen, oben vorgeschlagen.

    bei der 2. und 3. Eingabe muss ich eine Null vorstellen bzw. mit Nullen auffüllen. Wie kann ich bei der Eingabe von 2 auf 00002 stellen?

    Oder statt mit StringFormat, was ich immer etwas kryptisch finde, einfach mit StringRight.

    StringRight("00000" & $iZahl, 5)

  • Oder statt mit StringFormat, was ich immer etwas kryptisch finde, einfach mit StringRight.

    StringRight("00000" & $iZahl, 5)

    Stringformat ist in der Tat schrecklich... nie wirklich selbst abseits von fertigen "Pattern" benutzt und neulich zum ersten mal mit der doch etwas umfangreicheren Doku beschäftigt. Per Stringright gehts natürlich auch. ;)