Saltrød Horror Show nr. 95

av Odd de Presno.


Publisert i Datatid, Norge nr. 4/1995, side 80.


Livet på Saltrød står i automasjonens tegn. Noen systemer lages fortløpende for å få ting gjort raskere, andre på å få tid til å gjøre viktige ting overhodet.

En ny rutine for konvertering av ascii-tekst til hypertekst hører med i den siste gruppen. Jeg bruker den for å gjøre The Online World resources handbook om til Web-format. Slik at den som leser og søker i boken online, kan klikke på en ressursreferanse for straks å bli "satt over dit".

Manuell konvertering tar for lang tid og spesielt i lys av at boken skal ut i ajourført versjon annenhver måned. Nå bare taster jeg en kommando og Web-versjonen gjør seg selv.

Konverteringssystemet inneholder flere interessante tricks for kompliserte søk/erstatt-problemer, så les videre. Ønsker du først å se resultatet, kan det gjøres på Web-adressen

http://odd.site44.com/index.html

Systemet er for stort til å kunne beskrives i helhet. Vi skal se på utvalgte problemer og indikere løsninger. Resten får du sy sammen selv.

Koding av manus

Jeg forkastet tanken om å lage et system som konverterte en ukodet tekstfil til hypertekst. Unødvendig komplisert. Årsaken ligger blant annet i overgangen mellom Internet-adresser og hypertekst- koder til vanlig tekst, som i dette eksemplet fra boken:

The Common Market's free database service, I'M-Europe (Information Market Europe), is at URL http://www.echo.lu/.

World Wide Web-bildet skulle si det samme, men i det underliggende hypertekstdokumentet skulle det stå:

The Common Market's free database service, I'M-Europe (Information Market Europe), is at URL <a href="http://www.echo.lu/">http://www.echo.lu/.</a>

Det siste punktumet i adressen (lu/.) angir slutten på en setning i boken og hører ikke til hypertekst-koden. I selve koden skulle det kun stå <a href= "http://www.echo.lu/">, mens punktumet skulle være med i det brukeren ser på skjermen.

Da er det lettere å legge markeringskoder inn i kildeteksten for å angi begynnelse og slutt på tekstbiter som skal konverteres. I eksemplet over gjør jeg det slik:

The Common Market's free database service, I'M-Europe (Information Market Europe), is at URL Ühttp://www.echo.lu/Ü

Markeringstegnet er ascii nr. 220. Du får det ved å holde ALT-tasten nede og trykke 220 på ti-tastaturet (i DOS!). Jeg får det ved å trykke en makrotast.

Hovedpoenget er at koden er et unikt tegn. Det vil aldri bli brukt i bokens tekst. Det kan senere fjernes med søk-og-erstatt-programmer og gjør det enklere å konvertere linjen for bruk i Web-utgaven. Senere konverteres tegnet til koden <m> for videre behandling.

Her er noen andre viktige hypertekstkoder, som identifiseres med spesielle markeringskoder i min kildetekst:

<h1> Angir titel i størrelsesgrad 1 (markert med Ascii 016).
<h2> Angir overskrift i størrelsesgrad 2 (Ascii 006).
<b> Angir halvfet skrift (Ascii 002).

Bruker din tekstbehandler kontrollkoder for angivelse av fonter, bør du velge høyere tall i Ascii-tabellen til dine markeringskoder.

Automatisk fra tekst til html

Som vanlig har jeg sydd sammen et system av batchfiler og små og store hjelpeprogrammer. Systemet består av tre hoveddeler:

  1. En batchfil som kopierer kildefilen til en arbeidsfil på RAM-disken og gir kommandoen videre til neste hovedsystem.
  2. Et system som leser linjer fra kildefilen og mater dem en etter en til delsystem 3 for konvertering.
  3. Et sett batchfilerfiler som konverterer tekst og lagrer resultatet i en resultatsfil.

Om jeg har glemt hvordan

Systemet startes av filen HTML.BAT. Husker jeg ikke hvordan det gjøres, taster jeg

html ?

Tidlig i batchfilen står kommandoen

IF (%1)==(?) GOTO hjelp

Lengre nede kan du ha kommandolinjene

:hjelp
TYPE hjelpe.txt
GOTO slutt

Flere av mine batchfiler har nå en ?-parameter. Det gjør livet lettere.

Taster jeg "html filnavn", kopieres kildefilen til RAM-disken som D:\INPUT.TXT og delsystem 2 startes opp.

Enkeltvis behandling av linjer

Hos meg styres delsystem 2 av kommandofiler skrevet for ProYam, som er et kommunikasjonsprogram.

Datakommunikasjon? Neida! Jeg ønsker bare å bruke programmets egenskaper. Sharewareprogrammet ZCOMM kan også brukes. Det er derfor dette jeg har bygget beskrivelsen på under. (Du kan også gjøre det med programmet i filen ENV20.EXE, eller lage en rutine i BASIC eller et annet programmeringsspråk.)

I HTML.BAT startes ZCOMM med følgende kommandoer (merk at vi bruker "/"):

set phones=d:/HTML.T
zcomm call start

Den første linjen sier at ZCOMM skal bruke kommandoene i filen D:\HTML.T. Den andre starter programmet.

Kommandofilen HTML.T inneholder kryptiske kommandolinjer. Bruker du samme filnavn som meg, kan du kopiere dem slavisk. Merk at kommandolinjene må starte i henholdsvis kolonne en eller to som vist her:

 setup
 start: open - !tg d:input.txt 
 les: grab s1 
   if !t x 
   obey "!echo %s1>d:\string" 
   "!d:\input.bat" 
   goback les 

Linje to åpner kildefilen D:INPUT.TXT. I linje 3 henter ZCOMM den første linjen i INPUT.TXT. I linje 4 testes det på om ZCOMM har lest filen ferdig. Er filen lest ferdig, gir ZCOMM kontrollen tilbake til HTML.BAT og konverteringen er fullført.

Obey-kommandoen kopierer linjen over i en arbeidsfil kalt D:\STRING. Deretter startes batchfilen D:\INPUT.BAT, som utfører selve konverteringen. Når bearbeidingen er ferdig, henter ZCOMM inn neste linje fra INPUT.TXT. Kommandoene er kryptiske, men de virker.

Konverteringsjobben

Nå ligger det en tekstlinje i filen D:\STRING. Første oppgave er å finne ut om den inneholder en markeringskode. Det gjøres enkelt med hjelpeprogrammet FGREP i en serie kommandoer som denne (en kommando for hver kode):

FGREP -e "<m>" d:\string
IF ERRORLEVEL 1 GOTO url

Anta at linjen inneholder denne teksten fra eksemplet over:

(Information Market Europe), is at URL <m>http://www.echo.lu/<m>

FGREP finner koden <m> i D:\string og rapporter ERRORLEVEL nr. 1 til DOS. INPUT.BAT hopper derfor til etiketten :URL, som har følgende kommandoer:

CUT -f1 -d<m> d:\string>d:\string1
CUT -f2 -d<m> d:\string>d:\string2
CUT -f3 -d<m> d:\string>d:\string3

Hjelpeprogrammet CUT deler tekstlinjen i tre deler. Filen D:\STRING1 inneholder " (Information Market Europe), is at URL". Merk at eventuelle blanke først på linjen blir med over i D:\STRING1.

Filen D:\STRING2 inneholder "http://www.echo.lu/", mens filen D:\STRING3 inneholder ".". Markeringstegnene er borte.

INPUT.BAT må få vite hva slags Internet-ressurs det dreier seg om, da kodene må konverteres forskjellig. Med FGREP kan vi teste på om det er en elektronisk postadresse. Slike koder kan begynne med "<a href="mailto:". Er det en Web-adresse, skal den begynne på "<a href="http://" som over. I vårt eksempel gir følgende søkekommando positivt resultat:

FGREP -e "http" d:\string
IF ERRORLEVEL 1 GOTO http

La oss forutsette at det aldri er mer enn to koder pr. linje. I så fall vil INPUT.BAT vite at koden alltid ligger i D:\STRING2. Den nye tekstlinjen kan følgelig lages med denne COPY-kommandoen (alt på en linje):

COPY d:\string1+mail+d:\string2+mail2+d:\string2+mail3+d:\string3 d:\string4

Kommandoen kopierer tekstfiler, vi ikke har snakket om før. Filen MAIL inneholder "<a href="", MAIL2 inneholder "">" og MAIL3 inneholder "</a>". Resultatet havner i D:\STRING4 og ser slik ut:

(Information Market Europe), is at URL
<a href="
http://www.echo.lu/
">
http://www.echo.lu/.
</a>

Vi ønsker imidlertid alt på en linje. Hjelpeprogrammet GSAR gjør jobben med kommandoen

GSAR -s:013:010 -r -o d:\string4

Den ferdigkonverterte tekstlinjen ligger i D:\STRING4 og INPUT.BAT føyer den til resultatsfilen med kommandoene:

FGREP -sx "?" d:\string4>>d:\resultat.htm
DEL d:\string4

Har du lest hit, ser du mulighetene. Min versjon av INPUT.BAT er mer omfattende. Bl.a. lar jeg rutinen hoppe over umarkerte linjer med "===" eller "---" (Titler skal markeres med koder i html-dokumenter, ikke understrekninger).

Konverteringssystemet bygger på bruk av følgende verktøy: GSAR ligger i filen GSAR107.EXE (46KB, gratis), ZCOMM i ZCOMMEXE.EXE (221KB, US$40), FGREP i FGREP182.EXE (31KB, gratis) og CUT i filen CUTOUT.EXE (10KB, gratis).

Mer om roboter

Jeg hadde tenkt å skrive mer om DOS PHANTOM Task Automator her, men så ble jeg hengt opp i Stuffkey. Dette gratissystemets funksjon er å automatisere tastaturet.

Du kan gi det en kommandofil med tastetrykk og de vil automatisk bli "tastet inn" i dine brukerprogrammer. Du kan bruke tastaturet mens Stuffkey er i funksjon. Dermed kan du føye til data manuelt eller korrigere feil. Kommandofilene kan være opptil 64 Kb store.

Jeg har flere anvendelser. En består i å summere utvalgte linjer fra regnskapsrapporter. Batchfilen min har bl.a. følgende innhold:

Først brukes CUT (se over) for å fjerne unødvendig tekst fra arbeidsfilen. Eksempel:

CUT -c54-79 d:inn>d:input.prn

Summeringen gjøres med sharewareprogrammet ADDMACH. Men først må Stuffkey få instruks. Det gjøres med kommandoen:

STUFFKEY {Cr} 'S' 'G' 'd:input.prn' {Cr}{Cr} 'T'

Når ADDMACH startes med neste kommandolinje, trykker Stuffkey først på Enter-tasten (koden {Cr}). Det taster inn valgene S og G fra de to etterfølgende menyene, gir inputfilens navn, trykker to ganger på Enter og tilslutt "T" for å få summen av tallene.

ADDMACH ligger i filen ADDMACH.EXE (29 Kb, se Datatid 6-93, s. 62) og Stuffkey ligger i STFKEY41.EXE (85 Kb).



Det er forbudt å distribuere denne artikkelen - eller deler av den - i elektronisk, trykt eller kopiert form mot betaling.