Newsgroup: it.comp.os.dos
Titolo: Conversione caratteri>127 / spazi

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.---------+

 
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


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.---------+

 autoincrementanti (funziona anche con altri porting di sed).
Interessante soluzione. Purtroppo non conoscevo l'opzione "f" del sed.
Ciao

 Interessante soluzione. Purtroppo non conoscevo l'opzione "f" del sed.
... nemmeno io, o meglio, non ho pensato che potessere esistere una
simile ozione!