LabVIEWForum.de
Screenshots speichern, Problem mit fortlaufender Nummer - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: Datenbank & File IO (/Forum-Datenbank-File-IO)
+---- Thema: Screenshots speichern, Problem mit fortlaufender Nummer (/Thread-Screenshots-speichern-Problem-mit-fortlaufender-Nummer)



Screenshots speichern, Problem mit fortlaufender Nummer - Grobi - 10.04.2008 15:44

Moin, ich habe ein kleines Problem.

Also ich habe mir ein VI gebaut, das mir Screenshots eines beliebigen Graphen erstellt.

Dieses VI bekommt eine Graphenreferenz übergeben, und legt dann ein Image des Graphen in
einem Ordner ab, der im Pfad der Apllikation vorher erstellt wird.

Soweit so gut, das funktioniert auch alles einwandfrei.

Weiterhin wird das Bild jetzt mit fortlaufender Nummer dort abgelegt. PIC1.bmp bis PICX.bmp.
Wenn ich jetzt beliebige Bilder mit Hand lösche, werden die fehlenden Stellen quasi wieder
aufgefüllt.

Jetzt suche ich aber eine bessere Möglichkeit das ganze durchzuführen, denn ich mach es
aktuell so, dass ich mir jede Datei nacheinander anschaue.

Ich beginne mit PIC1, sehe die ist da, also weiter.. PIC2, ist da, ok weiter, PIC3, ist nicht da, Bild speichern als PIC3.bmp


Das geht alles super, solange man nicht 1000 oder mehr Bilder hat. Nun suche ich nach einer Möglichkeit,
wo ich zum Beispiel auf einen Schlag die höchste vorkommende Zahl im Dateinamen dieses Ordners finden kann,
ohne mir nacheinander jeden Dateinamen auf die Zahl hin zu überprüfen.
Bei vielen Bildern wird das ganze halt unangenehm langsam..


Ich hoffe ihr habt eine Anregung, mir fällt nämlich echt nix ein wie ich das realisieren kann.

mfG
Robert


Screenshots speichern, Problem mit fortlaufender Nummer - dc6xs - 10.04.2008 17:11

' schrieb:...

Weiterhin wird das Bild jetzt mit fortlaufender Nummer dort abgelegt. PIC1.bmp bis PICX.bmp.
Wenn ich jetzt beliebige Bilder mit Hand lösche, werden die fehlenden Stellen quasi wieder
aufgefüllt.

Jetzt suche ich aber eine bessere Möglichkeit das ganze durchzuführen, denn ich mach es
aktuell so, dass ich mir jede Datei nacheinander anschaue.

Ich beginne mit PIC1, sehe die ist da, also weiter.. PIC2, ist da, ok weiter, PIC3, ist nicht da, Bild speichern als PIC3.bmp
Das geht alles super, solange man nicht 1000 oder mehr Bilder hat. Nun suche ich nach einer Möglichkeit,
wo ich zum Beispiel auf einen Schlag die höchste vorkommende Zahl im Dateinamen dieses Ordners finden kann,
ohne mir nacheinander jeden Dateinamen auf die Zahl hin zu überprüfen.
Bei vielen Bildern wird das ganze halt unangenehm langsam..
Ich hoffe ihr habt eine Anregung, mir fällt nämlich echt nix ein wie ich das realisieren kann.

mfG
Robert

Hai Namensvetter,

a) warum als bmp? die Brauchen doch nur viel Platz.. PNG ist besser für was geeignet.
b) machste wirklich PIC1.bmp bis PIC9999.bmp? Wegen der Sortiererei würd ich da eher PIC0001.bmp bis PIC9999.bmp (oder .png nach a )
c) für jeden Tag ein neuen Ordner mit dem Datum anlegen?
d) unter Linux kannste dir mit ls -r PIC*.bmp den Inhalt eines Verzeichnisses rückwärtssortiert ausgeben lassen, unter DOS/Windows geht das bestimmt auch bei dir. Also per system_exec.vi das im passenden Ordner ausführen und den Text der zurückgegeben wird, parsen. (Geht das eigentlich per system_exec.vi?)
e) anstelle d) einfach in einer Config-Datei, den aktuellen Stand des Bildzählers speicheren und auswerten.

Gruß,
Rob


Screenshots speichern, Problem mit fortlaufender Nummer - jg - 10.04.2008 19:43

Kann Rob nur zustimmen, png ist bei Graphen klar zu bevorzugen, und dann würde ich auch erst mal die gesamte File-Liste (natürlich beschränkt auf Bilder) einlesen (-> nur "ein" HDD-Zugriff) und dann im Memory suchen. File-List bekommst du über dieses VI:

[attachment=11952]

MfG, Jens


Screenshots speichern, Problem mit fortlaufender Nummer - Grobi - 11.04.2008 06:40

' schrieb:Kann Rob nur zustimmen, png ist bei Graphen klar zu bevorzugen, und dann würde ich auch erst mal die gesamte File-Liste (natürlich beschränkt auf Bilder) einlesen (-> nur "ein" HDD-Zugriff) und dann im Memory suchen. File-List bekommst du über dieses VI:

[attachment=39129:Image01.png]

MfG, Jens

Ok schonmal danke, werde dann das andere Dateiformat nehmen.

Jens, das mit der Liste hab ich gefunden und dank dem Muster was man anschließen kann,
bekomme ich dann ein Array aus Strings, in dem nur nur Strings vom Format PIC*.png stehen.
Nun habe ich aber ein kleines Problem, ich hab mir jetzt folgendes überlegt. Ich möchte jetzt den maximalen
Bildindex haben. Jetzt könnte ich ja die Funktion Max-Min von Array dafür benutzen, dafür musste ich jetzt
aber das Array in einem Zahlenformat anstatt im Stringformat haben.

Kann ich jetzt auch direkt ein ganzes Array in ein Array aus Zahlen konvertieren,
oder muss ich über eine For Schleife N=Arraygröße jedes einzelne Element umwandeln
und dann das Maximum suchen, ich denke dann hab ich ja wieder nix gewonnen wenn ich
grade 10000 Bilder in dem Ordner habe was Schnelligkeit betrifft..

mfG
Robert

edit: Ein Screenshot zur Verdeutlichung (da ist es aber noch *.bmp)

P.S. Ich kann leider nichts im Forum dazu finden, wie ich aus diesem Stringarray ein Array
mit nur den Indizes bekomme, auch wenn String<->Zahl etc. schon oft behandelt wurde...
Selbst wenn ich die Elemente einzeln umwandle krieg ich den Format String für das Suchen nach
dem Wert wieder mal nicht gebacken..


Screenshots speichern, Problem mit fortlaufender Nummer - Grobi - 11.04.2008 08:10

Ich schreib mal eine Antwort, nochmal editieren wird mir selbst zu unübersichtlich.

Also die Lösung mit FOR, N=Arraygröße und dann aus jedem Element die Zahl
herausholen habe ich hinbekommen, davon nehme ich das Maximum+1 und das
ist halt der nächste Index.

Ob das jedoch auch einfacher geht, dass man ein komplettes Array
auf einen Schlag umwandelt, würde mich dennoch interessieren.


Screenshots speichern, Problem mit fortlaufender Nummer - jg - 11.04.2008 09:18

' schrieb:Nun habe ich aber ein kleines Problem, ich hab mir jetzt folgendes überlegt. Ich möchte jetzt den maximalen
Bildindex haben. Jetzt könnte ich ja die Funktion Max-Min von Array dafür benutzen, dafür musste ich jetzt
aber das Array in einem Zahlenformat anstatt im Stringformat haben.

Kann ich jetzt auch direkt ein ganzes Array in ein Array aus Zahlen konvertieren,
oder muss ich über eine For Schleife N=Arraygröße jedes einzelne Element umwandeln
und dann das Maximum suchen, ich denke dann hab ich ja wieder nix gewonnen wenn ich
grade 10000 Bilder in dem Ordner habe was Schnelligkeit betrifft..
Das müsstest du mal ausprobieren. Weiss ich jetzt auf die Schnelle auch nicht, ob es da eine Funktion gibt, die auch ein String-Array verarbeitet. Aber gewonnen hast du schon etwas, vorher hast du dir jeden Bildnamen zusammengestellt, geschaut, ob er auf der Festplatte ist, dann weiter. Langsam hieran ist das "Schauen auf Festplatte". Und das machst du jetzt ja nur einmal!
' schrieb:mfG
Robert

edit: Ein Screenshot zur Verdeutlichung (da ist es aber noch *.bmp)

P.S. Ich kann leider nichts im Forum dazu finden, wie ich aus diesem Stringarray ein Array
mit nur den Indizes bekomme, auch wenn String<->Zahl etc. schon oft behandelt wurde...
Selbst wenn ich die Elemente einzeln umwandle krieg ich den Format String für das Suchen nach
dem Wert wieder mal nicht gebacken..
Noch einfacher, wie dc6xs vorgeschlagen hat, wäre jetzt ein Datenname pic0001.png (oder pic00001.png), dann wäre die Liste ja geordnet. Ansonsten ist es selbst bei 10000 Strings wohl das beste, einfach aus allen die Zahl zu extrahieren (ob das jetzt in einer FOR-Schleife passiert oder per Funktion, die ein Array verarbeitet, dürfte egal sein, intern im Programmcode ist es sicherlich in beiden Fällen eine Schleife) und dann per Min-Max zu arbeiten. Oder du sortierst das Zahlenarray dann per Sort-Array, dann dürfte das Suchen nach dem ersten fehlenden Index auch recht schnell gehen.

MfG, Jens


Screenshots speichern, Problem mit fortlaufender Nummer - Grobi - 11.04.2008 09:37

' schrieb:Langsam hieran ist das "Schauen auf Festplatte". Und das machst du jetzt ja nur einmal!

Da hast du natürlich recht, da ich mir ja jetzt die komplette Dateiliste mit einer einzigen
Funktion zur Bearbeitung heranhole.

Ich kann zu der direkten Arraykonvertierung nichts finden, die Stringoperationen
"fressen" bei mir keine Array of Strings. Aber selbst wenn wird es wohl so sein wie
du es gesagt hast, dass dort auch Element für Element umgewandelt würde.

Dann kann ich das ja so lassen wie es jetzt ist. Besten Dank Leute.


P.S. Beantwortet noch jemand meine Frage Tips&Tricks/LV-Studentenversion Buersten