Newsgroup: it.comp.lang.visual-basic
Titolo: Open for binary ?

Ciao
Mi rendo conto che la domanda è da principiante ... ma devo pur cominciare!
Se apro con un editor esadecimale il file 1.txt che contiene
a
b
cd
leggo:
61 0D 0A 62 0D 0A 6364
Ok. Chiaro. Ora vorrei imparare a lavorare sui singoli caratteri "in
binario".
Ad esempio, trascrivere (senza usare funzioni di manipolazione di stringhe
tipo Replace$ !) 
nel file 2.txt il contenuto di quello 1.txt
1. dopo aver sostituito tutti i caratteri dal codice 61 con quello dal
codice 67
2. aver rimosso tutti i caratteri dal codice 0D
3. aver rimosso tutti i caratteri dal codice 0A
4. aver interposto una coppia di caratteri dai codici 0D 0A tra quelli i
cui codici sono 63 e 64
Ho fatto molti tentaivi aprendo i file in binario e usando Get e Put ma
non sono venito a capo di niente. 
Come potrei fare ? Dove posso imparare questa cosa ?
Uso VB 6.0. e non sono riuscito a trovare nell'help niente di pertinente.
Grazie Ciao
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 non sono venito a capo di niente.
Non ho capito assolutamente niente di quello che vorresti fare.
I file binari sono semplicissimi da usare, io uso sempre For Bynary anche
per lavorare su file di testo proprio perchè sono più immediati.
Ciao
--
Reporting tool: 
http://www.neodatatype.net

Mi spiace di non essere stato chiaro.
Provo a farmi capire con un esempio (che è poi la motivazione che mi ha
spinto ad interessarmi a questa faccenda).
Quando ci si trova a dover processare dei file html ci si scontra con il
problema che acquisire delle intere righe (ovvero delle stringhe che
terminano con Cr Lf o CrLf) rende tutto estremamente complesso; infatti,
il contenuto
<TD class="titolo">I Malavoglia</TD>
potrebbe essere stato scritto nel file come
<TD class="titolo">
I Malavoglia
</TD>
oppure
<TD class="ti
tolo">I Malav
oglia</TD>
oppure 
<T
D class="tito
lo">I Ma
lavoglia
<
/
TD>
Al contrario, all'interno di un editor come TextPad la faccenda è
semplicissima:
1. sostituisco tutti i ritorno a capo con un blanck (così ottengo un file
con "una sola riga")
2. sostituisco <TD class="titolo"> con Cr Lf<TD class="titolo">
3. sostituisco </TD> con </TD>Cr Lf
e così via per gli altri contenuti da elaborare.
A questo punto sono sicuro che ogni riga che inizia con 
 <TD class="titolo"> 
è esattamente del tipo 
 <TD class="titolo">I Malavoglia</TD>
e posso acquisirla ed elaborarla con estrema facilità.
Vorrei riuscire ad elaborare i file di testo in questa maniera anche
mediante programmi scritti in Visual Basic; ho quindi la necessità di
accedere al singolo carattere del file (quindi non solo caratteri
alfabetici a o numerici ma anche Cr e LF).
L'unica è usare la modalità binaria perchè anche qualora fossi riuscito a
sostituire tutti i ritorno a capo con un blanck avrei a quel punto un file
con una sola riga lunghissima che se letta mediante 
 Input #1, riga$
di genererebbe un errore (heap o stack, qualcosa del genere).
Avevo provato ad usare Replace$, vbCr, vbLF ... ma senza successo.
Grazie.


 infatti, il contenuto
Non č assolutamente necessario lavorare con un file binario in questo 
caso:
1) Apri il file
2) Lo leggi tutto quanto ed inserisci il contenuto in un variabile di tipo 
String
3) Tramite la Replace sostituisce tutte le occorrenza di vbCrlF
che in codice si tramuta in:
Dim fso As New FileSystemObject
dim myFile as File
dim myTS as TextStream
dim s as String
Set myFile = fso.GetFile("c:\miofile.txt")
Set myTS= myFile.OpenAsTextStream(ForReading)
s = myTS.ReadAll
myTS.Close
s=Replace(s,vbCrlf,"")
4) Tramite le Regular Expression manipoli il file come meglio credi.
Ma questa, č un'altra storia...
-- 
Gianluca Cannalire
Microsoft MVP/MCP - Visual Basic
http://www.visual-basic.it
http://community.visual-basic.it/gianluca

 Uso VB 6.0. e non sono riuscito a trovare nell'help niente di pertinente.
Secondo me così dovrebbe andare, ovviamente non è assolutamente ottimizato:
Do Until EOF(1)
    Get #1,,Char1
    If Asc(Char1) <> &H0D Or Asc(Char1) <> &H0A Then 'ignora caratteri 0D e 
0A
        If Asc(Char1) = &H61 Then Char1 = Chr(&H67)
        Put #2,,Char1
        If Asc(Char1) = &H63 Then
            Get #1,1, Char2
            If Asc(Char2) = &H64 Then
                Put #2,, Chr(0D) & Chr(0D) & Char2
            Else
                Seek(1) = Seek(1) - 1 'questo permette di rileggere il 
carattere Chr2..
            End If
        End If
    End If
Loop