Shell-Aufruf mit Ausgabe-Umleitung funzt nicht

Ich muss Barcodes (Code39) in gescannten Dokumenten finden, um diese Dokumente dann damit umzubenennen. Zunchst habe ich den Barcode-Reader von MBS (XZing) ausprobiert, aber dessen Erkennungsrate ist zu schlecht (sorry, Christian). Also habe ich nach Alternativen gesucht und bin beim kostenlosen “zbarimg” als CLI-Programm (Win/Mac) hngengeblieben. Der findet z.B. mhelos in einer technischen Zeichnung im Format A2 mit 200 dpi den Barcode-Aufkleber in 1.3s! Auch kopfstehend oder schrg … (Christian: wre sicher eine Plugin-Idee … :slight_smile:

Also habe ich den CLI-String (Pfade, Parameter usw.) in Xojo zusammengesetzt und lasse sie auf ein Shell-Objekt mit execute los. Die erste Merkwrdigkeit ist, dass s.result bzw. s.readall immer leer bleiben. Also habe ich die Ausgabe mit " > result.text" in eine Datei umgeleitet …
Nun gibt es das Problem. dass zwar das Textfile erstellt wird, aber ebenfalls immer leer ist.

ABER:

Fhre ich exakt (!) die gleiche Befehlszeile direkt im Terminal aus (habe mir den Code extra per clipboard.text aus Xojo kopiert), funktioniert es genau so, wie es sein soll, die result.txt enthlt das Ergebnis.

Wo ist das Problem? Danke fr Tips.

Nachtrag: Habe auch eine Windows-Version erstellt. Unter Windows funktioniert es per Shell aus Xojo heraus, da enthlt die erzeugte Textdatei das Ergebnis. Shell.result oder Shell.readall bleiben aber auch hier leer.

Code? Gibt es einen Fehler? Ist der Pfad zu zbarimg wirklich richtig?

Ich glaube, ich habe das Problem gelöst. Die Shell in Xojo ist einfach 'n Ticken dümmer als das Terminal. Während im Terminal der Aufruf des Namens “zbarimg …” genügt (vermutlich kann das Terminal die Umgebungsvariablen lesen), bedarf es in der Shell des kompletten Pfades. Den habe ich mit “mdfind zbarimg” herausbekommen, bei mir lautet er: “/usr/local/Cellar/zbar/0.10_10/bin/zbarimg”. Wenn ich also den Pfad mit aufrufe, funktioniert es …

Das steht so auch in der Dokumentation: Shell.

Es hat nicht die gleichen Umgebungsvariablen wie im “normalen” Terminal. Es ist es ja auch nicht - somit eigentlich auch logisch.
Vor allem die Such-Pfad-Umgebung ist anders. Da hast du ja schon herausgefunden wie’s dennoch funktioniert. Entweder den ganzen Pfad angeben. Oder beim Öffnen des Shell-Objekts zuerst die Umgebung für die nachfolgenden Befehle selber definieren/konfigurieren.

@Jürg: Kannst du mir ein paar Sitchworte geben, wie man die Umgebungsvariablen an einem Shell-Objekt konfiguriert?

vielleicht geht es besser über eine Batch Datei die dann ausgeführt wird.

Es ist (meines Wissens) nicht möglich, globale Umgebungsvariablen für Xojo’s Shell zu setzen.
Aber in jeder (neuen) Shell Instanz kann man die gängigen Möglichkeiten nutzen.
z.B.: https://linuxize.com/post/how-to-set-and-list-environment-variables-in-linux/

Ah … ok, also mit Kommandos innerhalb der existenten Instanz, nicht durch Properties des Shell-Objektes … ?

Im Notfall ja, aber ich hätte doch gerne eine “schöne kompakte Klasse” ohne viel externe “Vorbereitung” (abgesehen von der Installation von ZBarImg), die unter OSX und Win identisch genutzt werden kann. Die ist ja nun auch fast fertig. Wenn Interesse besteht, kann ich sie ja hier reinstellen …

Eine Code 39 Klasse zum Barcode lesen habe ich mal selber gemacht, war eine Woche Aufwand und sehr lehrreich.

Sag mal von wie vielen Dokumenten redest Du und ist das evtl. nur eine einmal Umwandlung?
Machst Du diese Umwandlung oder ein Benutzer oder soll das ganz automatisiert laufen?

Es ist Bestandteil eines größeren Digitalisierungs-Projektes, dabei geht es um die Nachbereitung der Inhalte tausender digitalisierter Leitz-Ordner. Im Vorbereitungsprozess werden die Ordner manuell durchgesehen und alles was nicht A4 ist, entnommen. Dabei bekommt die A4-Seite vorher und das entnommene Dokument (meist techn. Zeichnung, A3 und größer) je einen gleichen Barcode-Aufkleber (on demand aus Zebra-Drucker, gesteuert von einer Filemaker-Datenbank), um sie später wieder zusammenzuführen. Die A4-Dokumente gehen als Block durch einen vollautomatischen HP-Dokumentenscanner, der wird manuell benannt. Die A3-Dokumente gehen durch einen Xerox-Einzugsscanner und heissen zunächst alle “scan_20200415_22:53:16” o.ä. Die größeren Dokumente werden manuell durch einen Großformatscanner geschoben und dabei fragt die Scansoftware jedesmal nach einem Dateinamen. Der wird durch einen Barcode-Handscanner geliefert, der das Etikett liest.

Also müssen am Schluß die A3-Dateien nach den mitgescannten Barcodes durchsucht werden, um sie umzubenennen und die A4-Seiten, um die Stelle zu finden, wo das A3 eingefügt werden muss. Die größeren Zeichnungen werden nicht wieder in den A4-Block eingefügt, die kommen in den Anhang, dann muss der Barcode im A4 zu einem Link werden. Endformat ist PDF, die Scans davor erfolgen alle nach PNG …

Die Software zbarimg kann übrigens ziemlich viele 1D und 2D-Codes lesen, sie wird aber schenller, wenn man nur die aktiviert, die man tatsächlich sucht. Ich habe zunächst mit Code39 angefangen, weil der sich bequem in Filemaker als Javascript einbinden ließ, und die Dateinamen, die ich brauche sind nicht sehr lang. Inzwischen habe ich auch den QR-Code als Javascript, werde wohl demnächst darauf umstellen …

Ich denke mal die A3 Seiten sollen ganz bleiben, ansonsten wenn man die durch schneidet hat man 2x A4.

Wenn ich das jetzt richtig verstanden habe ist dieser automatische Dateiname blöd oder
das die gescannten A4 und A3 nicht in einem Datei Ordner landen.

Die A3-Seiten sollen unbedingt ganz bleiben. :slight_smile:

Also im Moment sehe ich eigentlich kein wirkliches Problem mehr, das System funtioniert so, wie geplant. Bedenke, es geht um mehrere tausend Dokumente, die auf verschiedenen Scannern verarbeitet und am Ende automatisch wieder zusammengefügt werden sollen.

Ich hatte im Vorfeld Tests mit dem Barcodereader aus dem MBS-Plugin gemacht, die eigentlich ganz hoffungsvoll verliefen. Leider zeigte sich, dass dann im “harten Einsatz” die Erkennungsrate einfach zu schlecht ist, deshalb meine hektische Suche nach anderen Lösungen. Mit zbarimg habe ich aber ein super geeignetes Tool gefunden, nur die Einbindung per Shell war zunächst etwas holprig. Läuft aber jetzt gut.

Hoffentlich ein Modell was nicht rum zickt oder mind. zwei von denen.

Und noch was lustiges, vielleicht kennst Du das noch nicht.
Youtube David Kriesel: Traue keinem Scan, den du nicht selbst geflscht hast

Jepp, danke, die Xerox-Story kenn ich. Wir haben den Modus abgeschaltet.

Für ein vergleichbares Projekte habe ich gute Erfahrungswerte was EInhugurs’ BarcodePlugin Klassen betrifft. Schon damit probiert? zumindest für mein Projekt war die Erkennungsrate vollkommen okay.

Ansonsten für Dein Terminal Problem betrifft, wurde der entscheidente Hinweis gegeben, Scripte als Bash Script oder Windows Batchfiles erstellen und ausführen lassen.

Hallo

Kannst du etwas genauer erklren, wie du das gemacht hast?

Ich will das gleiche machen, nur QR statt Code39.
Ich hab zwar hinbekommen, dass zBar einzelne Bilder scannt und umbenennt, aber ich kriegs nicht hin, dass alle Bilder gescannt werden.

Also wenn du die hier reinstellen knntest, wr ich dir sehr dankbar.

Hallo Fabian, ich lese hier nicht jeden Tag, deshalb erst jetzt. Die Klasse hab ich im Büro, stelle ich morgen rein. Für jedes Dokument starte ich den Shell-Prozess erneut, der Dokumenten-Ordner wird von Xojo aus durchgearbeitet. Auch das Umbenennen mache ich mit Xojo-Bordmitteln, nachdem ich das Resultat von ZBarimg eingelesen habe …