Newsgroup: it.comp.lang.visual-basic
Titolo: array da file txt incluso

ciao a tutti,
sapete se c'e' un sistema per includere un file txt in un vbs, facendo in
modo che il vbs si legga ogni riga del txt e inserisca i valori letti in un
array?
saluti
sp-


Non conosco bene i limiti di VBS, comunque in VB6 farei cosě:
definisci un array senza dimensioni, leggi il file riga per riga con Line
Input e, per ogni riga letta ridimensioni l'array utilizzando redim e
l'opzione Preserve (per mantenere i dati precedenti).
Ciao!
-- 
Esteban
www.seber.it
Questo post č stato scritto con bit riciclati.

"spintop"  ha scritto nel messaggio

Lo fanno quasi tutti i virus scritti in VBA.
Quindi si può fare.
termoPilucco, <eg>

 Quindi si puņ fare.
ah.... "buono" a sapersi :-/
pensa che io devo fare l'esatto opposto.
cioe', introduco nel MTA del server di posta un processo, scritto in VBS che
"scansiona" il messaggio di posta nel subject e nel body, in cerca di parole
"criminali"
(serve per aumentare un po' la protezione da spam, quindi le solite
porcherie + le estensioni vbs, exe, com ecc, in piu' se non dovesse bastare
c'e' sul server l'antivirus)
al che il vbs deve estrarre le keywords da sto file.txt , linea per linea ,
e costruirsi l'array con le keywords.
potrei scriverlo direttamente nel vbs, ma nella webmail ho inserito in
sistema di "segnalazione spam", dove uno scrive le parole che vuole siano
filtrate dal server e queste vengono scritte nel file.txt, per l'appunto
(altrimenti lavorare con filesystem nel file vbs mi sembrava decisamente una
mossa pericolosa).
purtroppo non conosco molto VBS, ma vbs per le asp (che vedo si somigliano).
qualche indicazione?
saluti
sp-

 qualche indicazione?
questo stampa se stesso:
const ForReading=1
Dim fso
Dim f
Dim fname
Dim txstr
Dim str
Dim arr
fname = wscript.scriptfullname
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.GetFile(fname)
Set txstr = f.OpenAsTextStream(ForReading)
str = txstr.ReadAll
arr = Split(str, vbCrLf)
str = ""
for each r in arr
 msgbox r
next
termoPilucco

figata! :)
gracias...
sp-

 gracias...
Ho dimenticato un po' di pulizia alla fine del listato:
erase arr
set txstr = nothing
set f=nothing
set fso=nothing
termoPilucco

 set fso=nothing
ah vero :)
nel ciclo for ho aggiunto : if r<>"" then msgbox r
cosi' salto le eventuali righe vuote nel txt
praticamente ora sono a questo punto:
blacklist = array("
joh...@begood.com
","
pat...@microsoft.com
",...)
quindi se non ho capito male mi basterebbe di fare un replace di vbCrLf con
"," per ottenere l'array nel formato che vuole il vbs.
oppure nel ciclo for dovrei fare una cosa cosi' :
dim keysarr
for each r in arr
    keysarr=r & "," & keysarr
next
blacklist=left(keysarr,len(keysarr)-1) (cosi' rimuovo la virgola in fondo)
msgbox blacklist
sto a di' stronzate?
^___^
ciao
sp-

 con [...]
Aspetta aspetta...
Esattamente come deve funzionare la cosa?
Se vuoi analizzare un testo alla ricerca di eventuali parole vietate ti
basta fermare il mio script alla riga
str = txstr.ReadAll
e successivamente verificare che quello che hai letto (ovvero il contenuto
di str) non abbia al suo interno una delle parole vietate:
1) ti crei un'array contenente le parole vietate (per esempio leggendole da
un file tramite lo script che ti ho passato)
2) verifichi che nessuna parola vietata sia contenuta nel testo
for each parolaVietata in arrayParoleVietate
    if instr(1,lcase(str),lcase(parolaVietata))<>0 then msgbox "Allarme
rosso"
next
termoPilucco

 next
allora, qua c'e' lo script che gia' assolve al compito di scansione delle
mail:
'-------------------------------------------------------
' Use the BadText array to check the start of message body
' for reserved text that indicates a bogus email.
'-------------------------------------------------------
BadText = Array("sex","f*ck", altro...)
If DeleteMail = 0 Then
 For x = 0 to Ubound(BadText)
'  If Left(message.TextBody,Len(BadText(x))) = BadText(x) Then
  If Left(message.TextBody,Len(BadText(x))) = BadText(x) or
Left(message.Subject,Len(BadText(x))) = BadText(x) Then
     DeleteMail = 1
     WshShell.LogEvent 4,"Email " & message.Subject & " Deleted.  Email to "
& message.To & " received from " & message.From & " was blacklisted due to
body text. Array Index:" & x
   Exit For
  End If
 Next
End If
come vedi e' piuttosto scomodo gestire l'array dentro al vbs, visto che ben
presto le keywords da killare saranno numerose.
quindi devo estrarre il contenuto del txt per farlo andare dentro al BadText
= Array(........)
sp-

 al BadText  = Array(........)
BadText=getArrayFromTextFile(nomeFileBadtext)
non testato, correggere eventuali bug:
function getArrayFromTextFile(nomeFile)
 Set fso = CreateObject("Scripting.FileSystemObject")
 Set f = fso.GetFile(nomeFile)
 Set txstr = f.OpenAsTextStream(ForReading)
 str = txstr.ReadAll
 getArrayFromTextFile= Split(str, vbCrLf)
 set txstr = nothing
 set f=nothing
 set fso=nothing
end function
Il file nomeFileBadtext deve contenere la lista delle parole vietate
separate da un invio a capo.
termoPilucco

 separate da un invio a capo.
si, adesso capisco.
praticamente facevo una serie di passaggi in piu' inutili, se non ho
afferrato male.
(adesso dovro' fare quelle prove tipo da sguaiati, farcendo le mail di prova
con insulti innominabili :)))))
occhei lo provo, ti so dire.
grazie ancora
sp-

c.d.o.
:)
grazie 1000
sp-