Newsgroup: it.comp.lang.visual-basic
Titolo: numero di caratteri dentro un file

salve a tutti,
ho creato questo semplice script VBS per determinare i lnumero di
caratteri che occorrono in un file id testo:
Const ForReading = 1
Const ForWriting = 2
filename = "c:\prova.txt"
Set objFSo = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile(filename, ForReading)
strContents = objFile.ReadAll
strFindText = "ù"
Do While objFile.AtEndOfStream <> True
  strLine = objFile.ReadLine
  If inStr(strLine, strFindText) Then
    i = i + 1
  End If
Loop
Wscript.Echo vbCrLf & "Number of records read: " & i
objFile.Close
ma non funziona, non mi visualizza alcun numero nella variabile "i"
:(
dove sbaglio?
grazie mille per il vopstro aiuto.
bye

 ha scritto nel messaggio news:1169471450.9...@a75g2000cwd.googlegroups.com...
salve a tutti,
ho creato questo semplice script VBS per determinare i lnumero di
caratteri che occorrono in un file id testo:
fai queste aggiunte e vedrai che funziona:
Dim i                    <--------------------------
Const ForReading = 1
Const ForWriting = 2
filename = "c:\prova.txt"
Set objFSo = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile(filename, ForReading)
strContents = objFile.ReadAll
strFindText = "ů"
i = 0                     <---------------------------- 


 objFile.Close
E poi togli la riga
strContents = objFile.ReadAll
altrimenti AtEndOfStream è già vero quando arrivi al ciclo Do While
-- 
3st3b4n
www.seber.it
Questo post è stato scritto con bit riciclati 

Andrea ha scritto:

Ciao Andrea.
Verifica se questa istruzione è corretta, o meglio se funziona come
credi...:
-----> If inStr(strLine, strFindText) Then
InStr restituisce un dato non Boolean ma un valore Variant (Long)
quindi non credo sia corretto, al massimo avresti dovuto scrivere:
If inStr(strLine, strFindText)>0 Then
in quanto se all'interno della stringa viene trovato il Testo da
cercare ne restituisce la posizione non True/False, mentre imponendo il
confronto con >0 lo converti in True/False... vedi tu...!
In ogni caso ritengo che ci possa essere ancora un dubbio, mi
spiego....
Con questo sistema puoi discriminare se in ogni riga c'è UN carattere,
ma non quanti...!
Se veramente vuoi vedere quanti caratteri ci sono nel testo devi
ciclare anche tutta la stringa e non solo
vedere se UNO è presente...!!!(a meno di non aver frainteso il tuo
post)
@Alex

 Set objFile = objFSO.OpenTextFile(filename, ForReading)
In VB si può fare una cosa del genere, penso che in VBS
si possa usare lo stesso sistema con le dovute modifiche.
Dim fso As New FileSystemObject
Debug.Print fso.GetFile("C:\lista.txt").Size
Bye, G. 

Paperino ha scritto:

Non vuole sapere quanti caratteri in generale contiene il file, ma
quante ricorrenze di un Carattere Dato....
Almeno io ho inteso così.
@Alex

 quante ricorrenze di un Carattere Dato....
Basta fare la differenza tra
Len(TuttoIlFile)
e Len(Replace(TuttoIlFile, "ů", ""))
Ciao 

 Ciao
Azzz... alcune volte mi spaventi....!
Decisamente bella idea.
@Alex


GRAZIE!
è possibile impostare anche un contatore per rilevare il numero di
caratteri sostituiti??
ho provato ad inserirlo ma purtroppo "strContents = objFile.ReadAll"
(che mi serve) mi si posiziona alla fine del file ed anche chiudendolo
e riaprendolo non serve a nulla.
Const ForReading = 1
Const ForWriting = 2
Dim a
filename = inputbox("Nome file da esaminare" & vbCrLf & vbCrLf &
"Sostituisce doppio apice","Sostituzione Caratteri Speciali","Es:
c:\35.txt")
Set objFSo = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile(filename, ForReading)
strContents = objFile.ReadAll
objFile.Close
' CONTROLLO Doppi apici
strFindText = Chr(34)
strReplaceText = "'"
Set objFile = objFSO.OpenTextFile(filename, ForReading)
Do While objFile.AtEndOfStream = False
  strLine = objFile.ReadLine
  If inStr(strLine, strFindText) Then
    a = a + 1
  End If
Loop
msgbox "Doppi apici trovati: " & a
objFile.Close
StrContents = Replace(strContents, strFindText, strReplaceText)
Set objFile = objFSO.OpenTextFile(filename, ForWriting)
objFile.WriteLine strContents
objFile.Close

 e riaprendolo non serve a nulla.
E questo cosa centra con il nostro problema di contare le lettere 
sostituite?
Dopo la ReadAll chiudi e butti tutto.
Ciao 

 Len(TuttoIlFile)
mi dà un risultato incongruo, "20"
si tratta di un file di testo di 350kb con più di 155 righe, com'è
possibile che mi restituisca solo 20 come valore?

 possibile che mi restituisca solo 20 come valore?
E io che ne so?
Contali: apri con notepad e fai un trova "ù" e vedi se sono più di 20...
oppure fai prima a farti un loop di InStr o di Mid(s, i, 1) e contarteli.
Ciao 


Puoi provare anche con:
UBound(Split(TuttoIlFile, "ù"))
Ma dovrebbe dare lo stesso risultato.
Bye
Raf
-----------------------------------------------------
Funk: cooler than the other side of the pillow.

 Ma dovrebbe dare lo stesso risultato.
Togliendo 1 perň ;)
Ciao 

 Ciao
Mmmm... l'array restituito da Split() non è a base 0?
Ciao

 Mmmm... l'array restituito da Split() non è a base 0?
Acc... vero... vacevo il conto degli elementi.
Ciao