Reality Check: Fremddatenuebernahme mit Cut&Paste
Thomas Berger
ThB at gymel.com
Do Jan 3 15:11:46 CET 2002
Liebe Liste, lieber Herr Eversberg,
ich habe spasseshalber einmal einen Flex geschrieben (unten angehaengt),
der die Uebernahme von Fremddaten realisiert, wenn diese sich in
der Zwischenablage befinden oder leicht dorthin befoerdern lassen,
Beispiele sind http://www.rezensionen.at oder die MAB-Anzeige des
BVB-OPACs.
Der Flex sammelt also die Zwischenablage ein und speichert sie weg,
damit import.exe darauf losgelassen werden kann, der ins adt-Format
konvertierte Satz wird dann als Neusatz eingelesen und zur Ergaenzung
angeboten.
Folgendes fiel mir auf:
- Die Clipboard-Funktionen ccopy, cpaste etc. haben es noch nicht
in die allgemeine flex-Dokumentation flex/flex1/flex2ger.rtf
geschafft, nur ueber das "Alphabetische Register" findet man
Dokumentation
- cpaste (kopiert Clipboard in die iV) bringt auch durchrauschenden
Text ins Schreibfeld (vgl. "cpaste w"), genau wie bei cpaste w
ist der Text dort aber nicht unbedingt zugaenglich, wenn/weil?
er ungeeignete Zeilenvorschuebe enthaelt
- Je nach Fremddatenquelle und Browser haben die Daten DOS-Zeilen-
umbrueche (13 10), oder Unix-Zeilenumbrueche (10) oder in einem
Fall sogar Macintosh-Zeilenumbrueche (13), die meisten vorhandenen
Importparameter verfuegen aber nur die DOS-Umsetzung
_ 13 10
_ 0
obwohl die Ergaenzung
_ 10
_ 0
_ 13
_ 0
absolut gefahrlos waeren (dies betrifft die in der aktuellen Form
kaum brauchbaren "ZACK"-Schnittstellen z39.aim, z39i.aim aber auch
mab2.aim und mab2cd.aim). Im unten angefuegten Flex ist durch
!(3)! Code markiert, der Zeilenumbrueche repariert, mangels geeigneter
Ersetzungsbefehle fuer die iV wird dies durch einen zusaetzlichen
Wegschreibe- und Wiedereinleseprozess realisiert (eigentlich waeren
sogar zwei noetig: der Beispielcode repariert Isolierte Zeichen 13,
also ^M, und er muesste symmetrisch noch einmal angefuegt werden,
um isolierte Zeichen 10, also ^J, ebenfalls umzusetzen.
- Der Import wird mit cAll ausgeloest, auffaellig war, dass danach
a99 nicht immer im Vordergrund ist, geloest habe ich dies mit einem
eigentlich ueberfluessigen weiteren "activate", dabei faellt jedoch
stoerend auf, dass manchmal ein anderes DOS-Fenster (das nichts
mit a99 zu tun hat) minimiert wird...
- Weil die URL's von rezensionen.at recht guenstig hierfuer geeignet
sind, wollte ich eine ISBN-Suche dortselbst mit der "Tuer zur Welt"
realisieren, das ist aber gescheitert: Der Uebergabeparameter %1
an door.bat ist nur dann belegt (also nicht ""), wenn der letzte
Find-Befehl *erfolgreich* war (und das ist bei Fremddatenuebernahme
die Situation, in der man eigentlich nicht woanders weiter suchen
moechte)
- Nun bietet ja auch Windows die Moeglichkeit, mittels "start" Dateien
mit bekannten Extensions oder URL's mit der Windows bekannten
Standardanwendung zu starten, ohne dass man wissen muesste, dass
der installierte Browser Netscape heisst und wo er installiert ist.
Der unten angefuehrte Flex definiert Strg-s auf folgenden Flex:
ask |9ISBN f. rezensionen.at:=#uIS
if cancel end
ins #uIS
get env COMSPEC
if %cmd.exe% var "cmd /c start "
if not %start% var "start "
var +"http://www.biblio.at/rezensionen/list.php3?isbn=" #uIS
CAll
Eigentlich soll einfach der Aufruf
start http://www.biblio.at/rezensionen/list.php3?isbn=...
ans Betriebssystem abgesetzt werden, dieser Aufruf funktioniert so
aber nur fuer Win'9x, wo "start" ein externes Kommando ist, fuer
WinNT muss es "cmd /c start" heissen, weil "start" ein interner
Befehl des Kommandointerpreters ist. Durch das "CAll" entsteht nun
auch zusaetzlich kurzzeitig eine DOS-Box, aus der der Aufruf dann
abgesetzt wird.
Mein Vorschlag waere, a99 bzw. die Flex-Sprache um ein geeignetes
"start"-Kommando zu erweitern, dass betriebssystemabhaengig stets
einen korrekten Aufruf bewirkt, auch ohne den Umweg ueber eine
DOS-Box, vermutlich koennte man hierdurch auch den etwas
unuebersichtlichen
Zoo "call", "cAll", "Call", "CAll" etwas zaehmen.
Der unten angefuehrte Beispiel-Flex funktioniert uebrigens
tadellos, viel Spass damit.
viele Gruesse
Thomas Berger
--%<schnipp--
% rezat.flx
% Uebernahme von MAB-Daten per Cut&Paste, etwa von rezensionen.at
% (http://www.rezensionen.at)
% Besonderheiten: - Zeichensatz ist Latin 1
% - Zeilenumbrueche sind schwer kontrollierbar
% Anpassen:
% !(1)!: Automatische Belegung der Phrase Strg-r beim ersten Aufruf
% !(2)!: Umwandlung von Windows-ANSI nach DOS-ASCII zur Vorbereitung
% des Imports
% !(3)!: MSIE 4.0 liefert ^M (ohne ^J) als Zeilentrenner
% !(4)!: Name der Importparameter (eingestellt: mab2)
% !(5)!: Name des Bearbeitungsformulars (eingestellt: [Buch: Teil 1])
% 0. Verarbeitungsschritt: Daten sind im Browser mit der Maus markiert,
% (etwa durch Strg-A) und dann in die Zwischenablage ueberfuehrt
% (etwa durch Strg-C)
% 1. Verarbeitungsschritt: Dieser Flex wird ausgeloest,
% etwa durch Windows-Hotkey, der ueber eine .BAT-Datei flex.exe
% aufruft, oder aber durch eine Aktion mit a99-Phrasen (das geht
% auch mit Strg-irgendwas) oder ganz zur Not durch Eingabe von
% X rezat
% im Schreibfeld (bei entsprechenden Rechten)
% !(1)! Wenn durch den ersten Aufruf gleichzeitig die Aktivierung auf
die
% Phrase Strg-R gelegt werden soll, die folgende Zeile aktivieren
phrase ^r X rezat.flx
% !(1)! Wenn mit Strg-s eine ISBN-Suche ausgeloest werden soll:
var '^s x '
var +'ask |9ISBN f. rezensionen.at:=#uIS\\'
var +'if cancel end\\'
var +'ins #uIS\\'
var +'get env COMSPEC\\'
var +'if %cmd.exe% var "cmd /c start "\\'
var +'if not %start% var "start "\\'
var +'var +"http://www.biblio.at/rezensionen/list.php3?isbn=" #uIS\\'
var +'CAll'
phrase
% 2. Verarbeitungsschritt:
% a - Zwischenablage wird in die iV gesammelt
cpaste
% b - Plausibilitaetstest
if "### " jump istmab
mess Kein MAB-Datensatz in der Zwischenablage?
end
:istmab
% c - aktuelle Ausgabedatei retten nach #uRE (iV wird zerstoert)
var E
insert #uRE
% d - neue Ausgabedatei oeffnen
open x rezat.mab
if ok jump kannexport
mess Ausgabedatei rezat.mab kann nicht geoeffnet werden!
end
:kannexport
% e - Zwischenablage wird erneut in die iV gesammelt
cpaste
% f - nach ASCII wandeln
% !(2)! folgende Zeile ggfls. deaktivieren, falls Importparameter ANSI
wollen
ascii
% g - wegschreiben, Datei schliessen
write
close xport
!(3)! % h - erneut einlesen, dabei Zeilenumbrueche reparieren
!(3)! var ""
!(3)! insert #ucx
!(3)! open rezat.mab
!(3)! :loop
!(3)! fetch ^13
!(3)! if cancel jump rereadok
!(3)! insert #ucc
!(3)! var #ucx "^J" #ucc(B"^J")
!(3)! insert #ucx
!(3)! jump loop
!(3)!
!(3)! :rereadok
!(3)! close
!(3)! % i - erneut wegschreiben
!(3)! open x rezat.mab
!(3)! var #ucx
!(3)! write ^
!(3)! close xport
% j - Alte Ausgabedatei wiederherstellen
var #uRE
open x
var ""
insert #uRE
!(3)! insert #ucc
!(3)! insert #ucx
% 3. Umwandlung anstossen
% a - Ergebnisdatei sicherheitshalber loeschen
fsize rezat.adt
if not no delete rezat.adt
% b - Importbefehl bauen (Importparameter MAB2.cIM) und minimiert
ausfuehren
% !(4)!: Anpassen: -i*mab2*
var P "import -f5 -imab2 -drezat.mab -ee-1/rezat.adt -P" P " -k" K " -v0
-s0"
cAll
% 4. Ergebnis einlesen als neuen Datensatz
new
read rec rezat.adt
% b - Anzeige im Anzeigefenster und im Auswahlfenster aktualisieren
display
show record
% c - Formular hochjagen
activate
% !(5)!: in folgender Zeile den Namen des Formulars anpassen:
var "Buch: Teil 1"
form
if cancel end
% 5. Speichern?
Put
% fertig
Mehr Informationen über die Mailingliste Allegro