RegExp soll Dateioperationen ermöglichen

  • Hallo. Ich habe folgende Frage:
    Wie kann ich eine Dateiliste, die das Ergebnis einer RegExep-Abfrage ist, so verwerten, dass ich damit Dateioperationen durchführen kann.

    Hintergrund: Ein Kunde kann im Internet unter verschiedenen Fotos x Stück auswählen und per Online-Formular (PHP) bestellen. Die bei mir eingehende eMail sieht dann (bisher) in dem entsprechenden Abschnitt so aus:
    --@@Foto-Anfang@@--
    b20030907_01.JPG
    b20030907_03.JPG
    -@@@Foto-Ende@@@-

    Diesen Teil kann ich so in eine Variabel bringen:
    %_Foto="%SETPATTREGEXP='--@@Foto-Anfang@@--(.*?)-@@@Foto-Ende@@@-'%REGEXPMATCH='%TEXT'"

    Ergebnis von %_Foto ist dann
    b20030907_01.JPG
    b20030907_02.JPG

    Nun will ich dem Besteller eine Antwort-eMAil schicken, in der u.a. die Größe der bestellten Daten enthalten ist. Eine Funktion müsste also jetzt jedes Element von %_Foto durchlaufen und auf der Festplatte gucken wie groß die Datei ist, dass dann alles wieder in eine Varaibel schreiben damit ich das zusammenrechnen (lassen) kann.
    Ich kann leider nicht sagen "Gib mir die Größe des betroffenen Verzeichnis, in dem die Fotos liegen, wieder", weil da ja auch die Fotos liegen, die der Besteller nicht haben will. Ich will die nicht benötigten Bilder auch noch nicht löschen, um so das Verzeichnis zu reinigen und die Größe zu bekommen.

    In einer späteren eMail sollen dann weitere Operationen mit den Dateien erledigt werden wie anhängen (Attachment), verschieben, löschen usw. Aber dafür gibt es ja Macros.

    Mehrere Ansätze:
    1. so etwas wie "for each Element in %_Foto; copy jedes Element von A nach B"
    mit dem Effekt, dass ich wirklich nur die Dateien in einem Verzeichnis liegen habe, die ausgewählt wurden. Die Größe kann ich mir dann ausgeben lassen.

    2. für jedes Bild schreibe ich vorher eine Textdatei, in der die Dateigröße steht. Diese Datei könnte ich mir dann ausgeben lassen, aber auch dafür bräuchte ich Zugang von jedem einzelnen Element in %_Foto.

    3. Einen externen Exif-Reader starten der das Ergbenis zurückliefert. Aber auch hier ist das Problem, dass wenn ich keinen Zugriff auf alle Elemente habe ich bestenfalls eine Datei übergeben kann.

    4. per Hand die Größe eintragen :(


    Habt Ihr eine bessere Idee und/oder welche von diesen ließe sich wie umsetzen?

    Danke
    Batler

    Einmal editiert, zuletzt von Thomas Woelk (3. Juli 2004 um 09:11)

  • Zitat

    Wie kann ich eine Dateiliste, die das Ergebnis einer RegExep-Abfrage ist, so verwerten, dass ich damit Dateioperationen durchführen kann.


    Gar nicht.

    Zitat

    Nun will ich dem Besteller eine Antwort-eMAil schicken, in der u.a. die Größe der bestellten Daten enthalten ist. Eine Funktion müsste also jetzt jedes Element von %_Foto durchlaufen und auf der Festplatte gucken wie groß die Datei ist, dass dann alles wieder in eine Varaibel schreiben damit ich das zusammenrechnen (lassen) kann.


    Was passiert, wenn die Datei mehrmals mit unterschiedlichem Inhalt vorhanden ist?

    Zitat

    Ich kann leider nicht sagen "Gib mir die Größe des betroffenen Verzeichnis, in dem die Fotos liegen, wieder", weil da ja auch die Fotos liegen, die der Besteller nicht haben will.


    Eben.

    Zitat

    Ich will die nicht benötigten Bilder auch noch nicht löschen, um so das Verzeichnis zu reinigen und die Größe zu bekommen.


    Warum nicht fuer jeden Auftrag ein eigenes Verzeichnis erstellen?

    Zitat

    In einer späteren eMail sollen dann weitere Operationen mit den Dateien erledigt werden wie anhängen (Attachment), verschieben, löschen usw. Aber dafür gibt es ja Macros.


    Gibt es die?

    Zitat

    3. Einen externen Exif-Reader starten der das Ergbenis zurückliefert. Aber auch hier ist das Problem, dass wenn ich keinen Zugriff auf alle Elemente habe ich bestenfalls eine Datei übergeben kann.


    Ist Dir so ein Programm bekannt, welches die Infos auf der Konsole ausgibt?

    Mein Vorschlag: Man koennte eine Loesung schick mit Python oder einer anderer Scriptsprache erstellen. Die formatierten Rueckgabewerte anschliessend in Deine Mail uebernehmen. Wird dann sicherlich uebersichtlicher als eine integrierte Loesung mit tausenden von Schnellvorlagen und Makro-Plugins...

    Man möchte manchmal Kannibale sein, nicht um den oder jenen aufzufressen, sondern um ihn auszukotzen. Johann Nestroy.

  • Zitat

    Ist Dir so ein Programm bekannt, welches die Infos auf der Konsole ausgibt?


    command.com mit entsprechenden Parametern ;)
    Davon halte ich aber nichts, da für jedes Foto die Platte oder ein spezieller Pfad durchsucht wird, was unter Umständen doch sehr lange dauern kann. Ich würde stattdessen die Bilderliste lieber entsprechend formatiert in eine Textdatei ausgeben, diese kann man dann leicht per RegExp auswerten.

    Jetzt is nur noch das Problem das man mehrere Dateien hat...dazu bräuchte man eben eine rekursive Vorlage die die Variable mit der Bildliste Schritt für Schritt abarbeitet... :pfeif:

  • Zitat

    Was passiert, wenn die Datei mehrmals mit unterschiedlichem Inhalt vorhanden ist?
    Warum nicht fuer jeden Auftrag ein eigenes Verzeichnis erstellen?

    Jeder Auftrag hat eine eigen ID und ein eigenes Verzeichnis, dass ich auch eindeutig lokalisieren kann. Hilft aber nichts, sofern ich die unbenötigten Dateien nicht lösche (was ich wohl mangels besserer Lösung machen werde)

    Zitat

    weitere Operationen mit den Dateien über Makros
    Gibt es die?


    Die Zombie-Macros sollen das können mit
    %COPYFILE("c:\windows\explorer.exe","c:\explorer.exe","1")
    %DELETEFILES("c:\windows\temp\*.txt") ...


    Zitat


    Ist Dir so ein Programm bekannt, welches die Infos auf der Konsole ausgibt?

    Exif Reader kann das per Batch-Datei
    Mit der Syntax @for %%1 in (*.jpg;*.mrw;*.tif) do exifread.exe -csv "%%1"
    wird für jede Bilddatei eine TXT mit allen Infos ausgegeben.

    Gruß
    Batler

  • Zitat

    Problem das man mehrere Dateien hat...dazu bräuchte man eben eine rekursive Vorlage


    Könnte ich mit leben.

    Zitat

    Bilderliste lieber entsprechend formatiert in eine Textdatei ausgeben


    Du meinst alle Bilder, die zur Auswahl stehen und von denen der Kunde vielleicht nur ein oder zwei aussucht, als Textdatei etwa so?
    Fotovorgang151.txt

    bild1.jpg; Größe: 3MB; copyright: xyz; ...
    bild2.jpg; Größe: 4MB; ...
    ...

    Zitat

    Vorlage die die Variable mit der Bildliste Schritt für Schritt abarbeitet

    Tja und da bleibe ich eben hängen. Wie vergleichen wenn Anzahl und Position der Vergleichsmöglichkeiten unbekannt sind?

    Gibt es nicht so etwas wie %Cut? Nach dem Motto "schreibe mir meine Variable %_Foto in eine externe Datei, lese die erste Zeile, vergleiche sie, lösche sie dann und lies die zweite? Die maximale Zahl aller Durchgänge könnte ich begrenzen, da ich ja weiß wieviele Fotos zur Auswahl stehen.

    Aber wahrscheinlich dauert das alles viel zu lange mit dem Auslesen. Könnte auch über eine SQL-Abfrage gehen, da meine Bilder mit ThumbsPlus gespeichert sind und da eine Access-MDB-Datei bzw. MySQL-Datei drunter liegt. Aber die Abfrage würde wohl auch ewig dauern.

    Von daher scheint das manuelle Löschen der nicht bestellten Dateien übrig zu bleiben.

    Gruß
    Batler

  • Zitat

    Mein Vorschlag: Man koennte eine Loesung schick mit Python oder einer anderer Scriptsprache erstellen

    Echt, meinste Python lernen rechnet sich noch? Ich kämpfe gerade mit VisualBasic, OpenOffice Basic oder wie das heißt, MySQL, PHP, XML und anderen programmspezifischen Sprachen. Eigentlich wollte ich noch mal Russisch lernen, von der zwischenmenschlichen Kommunikation mal ganz abgesehen :)

    Aber im Ernst: Kann Python wesentlich mehr als die oben beschriebenen Sprachen?

    Klar kann ich die eingehende eMail als TXT abspeichern und dann in von mir aus Access aufmachen, abgleichen und verändern. Aber das dabei immer ein externes Programm gestartet werden muss ist Mist, darum finde ich ja TB so gut, weil es mit den Makros sonst fast alles kann.

    Gruß
    Batler

  • Zitat


    Echt, meinste Python lernen rechnet sich noch?


    Warum nicht?

    Zitat

    Ich kämpfe gerade mit VisualBasic, OpenOffice Basic oder wie das heißt, MySQL, PHP, XML und anderen programmspezifischen Sprachen.


    IMO kommt wohl auf die Aufgabenstellung an. "Man kann mit einem Schweissbrenner kein Holzhaus bauen."
    Why Python? » http://www.linuxjournal.com/article.php?sid=3882

    Zitat

    Eigentlich wollte ich noch mal Russisch lernen, von der zwischenmenschlichen Kommunikation mal ganz abgesehen :)


    IMHO eine Sprache die man nur durch regelmaessiges sprechen behalten kann. Ich war erschrocken, wie viel ich doch schon wieder vergessen hatte. :(

    Zitat

    Aber im Ernst: Kann Python wesentlich mehr als die oben beschriebenen Sprachen?


    Ob Python mehr kann weiss ich nicht (bin selber noch Anfaenger). Was ich sehe, Python erzeugt einen schoen lesbaren Code. Ausserdem lassen sich mit einfachsten Mitteln auch komplizierte Aufgaben loesen.

    Zitat

    Klar kann ich die eingehende eMail als TXT abspeichern und dann in von mir aus Access aufmachen, abgleichen und verändern. Aber das dabei immer ein externes Programm gestartet werden muss ist Mist, darum finde ich ja TB so gut, weil es mit den Makros sonst fast alles kann.


    IMHO unterschaetzt Du die Makros.

    Man möchte manchmal Kannibale sein, nicht um den oder jenen aufzufressen, sondern um ihn auszukotzen. Johann Nestroy.

    Einmal editiert, zuletzt von Thomas Woelk (4. Juli 2004 um 08:39)