Discussione:
Conversione caratteri>127 / spazi
(troppo vecchio per rispondere)
BIG (Umberto)
2009-09-18 14:00:31 UTC
Permalink
Ricollegandomi al problema che avevo in giugno e che ne é la continuazione:
[lungo] batch + SED (lavorare usando le liste)
Debbo fare un accrocchio per convertire alcuni files (qualche centinaio)
che utilizzano una tecnica strana:
Ciascun file, testo puro, fatto col vecchio dos 3,3 ha gli spazi codificati
secondo questa tabella:

carattere ascii 128 $80 = 1 spazio
carattere ascii 129 $81 = 2 spazi
carattere ascii 130 $82 = 3 spazi
carattere ascii 131 $83 = 4 spazi
carattere ascii 132 $84 = 5 spazi
...eccetera fino a (penso) 80 spazi (128+80)

Mi spiego con un esempio (supera gli 80 caratteri sulla riga...):

4C 41 4C 4C 85 41 2E 30 30 85 4C 41 4D 50 2E 80 41 4C 4C 41 52 4D 45 80 LALL.A.00.LAMP..ALLARME.
spazi: 6 6 1 1

deve diventare:

LALL A.00 LAMP. ALLARME
spazi: 6 6 1 1

Esiste un modo elegante e veloce?
Avevo pensato ad un piccolo .EXE fatto in gwbasic compilato, ma mi sembra
un tantinello macchinoso.
Pensavo piú a un qualcosa legato a SED, TR o AWK.


For my real address use the X-SPAM header
--
+---------------------------------------------------------------------------+
|I puristi ritengono inopportuno utilizzare driver proprietari sutto Linux, |
|i masochisti amano utilizzare driver Windows sotto Linux... Twisted Evil |
+-----#19--------------------Campagna contro le pubblicita` idiote.---------+
gioacchino
2009-09-19 13:51:32 UTC
Permalink
Post by BIG (Umberto)
Esiste un modo elegante e veloce?
Avevo pensato ad un piccolo .EXE fatto in gwbasic compilato, ma mi
sembra un tantinello macchinoso.
Pensavo piú a un qualcosa legato a SED, TR o AWK.
Con tr potresti fare questo:

tr \\200-\\377 ' '

Così tutto l'output dei caratteri "estesi" viene convertito in spazio.
Però non è quello che ti serve visto che ogni carattere superiore a 80h
viene convertito sempre come 80h. Non conosco se tr permette di poter
sostituire ad un carattere di input più di un carattere di output (il
contrario invece è possibile attraverso un'opzione di tr). Puoi provare a
cercare in internet e magari se è possibile scrivilo qui così è utile a
tutti.

ciao
BIG (Umberto)
2009-09-23 20:48:18 UTC
Permalink
gioacchino in data Saturday 19 September 2009 15:51, nel gruppo it.comp.os.dos
Post by gioacchino
cercare in internet e magari se è possibile scrivilo qui così è utile a
Riporto per esteso la risposta avuta su alt.msdos.batch (in inglese), fornitami
da billious.
A pensarci era elementare. Il trucco é di fare test con comandi
autoincrementanti (funziona anche con altri porting di sed).
Post by gioacchino
if char = 128   $80      = 1 space
if char = 129   $81      = 2 spaces
if char = 130   $82      = 3 spaces
if char = 131   $83      = 4 spaces
...etcetera
The files are a simple tips to convert it?
The conversion job itself, I'd use SED (google - I use HHSED)

create a file SC.SED

-------- begin --------------
s/\xff/\x20\xfe/g
s/\xfe/\x20\xfd/g
...(and so on, in REVERSE-numerical order)
s/\x82/\x20\x81/g
s/\x81/\x20\x80/g
s/\x80/\x20/g
-------- end --------------

then the command

SED -fSC.SED <infile >outfile

should do the conversion.

(simply substituting a space + the next-lowest high-value for each
high-value; SED will cascade the change through each SED line)

for %i in (*.txt) do SED -fSC.SED <%i >%~ni.xtx

(from the prompt)
 where *.txt is your sourcefile mask will create *.xtx as the converted
files.



For my real address use the X-SPAM header
--
+---------------------------------------------------------------------------+
| Un tacchino all'agnello: Buona pasqua! |
| L'agnello al tacchino: Vaffaculo, buon Natale! |
+-----#23--------------------Campagna contro le pubblicita` idiote.---------+
gioacchino
2009-09-24 08:37:43 UTC
Permalink
Post by BIG (Umberto)
A pensarci era elementare. Il trucco é di fare test con comandi
autoincrementanti (funziona anche con altri porting di sed).
Interessante soluzione. Purtroppo non conoscevo l'opzione "f" del sed.
Ciao
big (umberto)
2009-09-24 11:19:04 UTC
Permalink
Post by gioacchino
Interessante soluzione. Purtroppo non conoscevo l'opzione "f" del sed.
... nemmeno io, o meglio, non ho pensato che potessere esistere una
simile ozione!

Continua a leggere su narkive:
Loading...