[Allegro] a99: Problem mit mittellangen Zeilen bei get

Bernhard Eversberg ev at biblio.tu-bs.de
Fr Dez 9 12:33:33 CET 2011


Am 09.12.2011 07:58, schrieb Bernhard Eversberg:
>
> Sollten wir also mal versuchsweise die Codes 13 und 10 drinlassen? Sie
> stehen ja zwangsläufig nur am Ende einer "Zeile", weil "get" an der
> Stelle das Lesen beendet.
> Wenn wir nun noch einbauen, daß bei if %...% auch Steuerzeichen
> möglich sind, wie bei (b"...") usw., also ^M für 13 und ^J für 10,
> könnte man deren Präsenz leicht mit if %^M% etc. abprüfen und
> die Zeichen, wenn's denn sein soll, mit var (F"^M^J") wegnehmen.
>
> Ich denke, das wäre die einfachste Lösung und würde wohl bestehende
> Anwendungen nicht beschädigen.
>

Versuchsweise ist das jetzt mal so eingebaut. Ein entsprechend
variiertes a99.lzh liegt unter "aktuelle-version" bereit.
(Versionsnummer V31.12)


Es folgt ein kurzes Skript  getfile.flx  als Beispiel.
Die angefragte Datei, beliebig lang, wird zeilengetreu kopiert, auch
wenn die Zeilen länger als die jetzt eingestellte Puffergröße von 8K
sind. Die gelieferten Zeilen können mit 10 oder 13 10 beendet sein,
gespeichert wird immer 13 10.
Dazu wird die neue Möglichkeit von  if %...%  genutzt, wie man
sieht, um ein Flag zu setzen für den Zeilenvorschub. Ist es nicht
gesetzt, ist die betr. "Zeile" nur eine Fortsetzung der vorangegangenen.



    getfile.flx : Eine Datei aus dem Internet holen und abspeichern
    2011-11-09    Nur als Muster!   Nur ab a99 V31.12
    Es koennen beliebig lange "Zeilen" auftreten

    Aufruf:  X getfile <url>

ins $url

var $url
   Die "Datei" oeffnen (kann auch eine dynamische sein)
open

   Datei soll dann  inter.dat  heissen
open x inter.dat


:loop
   Flag ruecksetzen

#uzv

   "Zeile" holen
get
   kam nix mehr?
if cancel jump ende
   sonst in $g ablegen
ins $g
if %^M% #uzv 1
if %^J% #uzv 1

   13 und 10 am Ende weg und "Zeile" ausgeben
var $g (F"^M^J")
wri
   Nur wenn #uzv, dann Zeilenwechsel
if #uzv wri n
jump loop

:ende

close
close x

fsize inter.dat
ins $fs


   Fertigmeldung
var "Datei inter.dat liegt bereit, Umfang: " $fs
mes





Mehr Informationen über die Mailingliste Allegro