PDA

View Full Version : [Macro excel] Problemi con gli a capo durante la lettura di un file


frizzo28
27-04-2009, 09:53
Ciao a tutti ho un problema con una macro excel in cui devo leggere un file .csv ( in pratica un file di testo separato da virgole).
In pratica nei file forniti in input al programma alcuni hanno solo il LF(ASCII 10) e altri hanno sia CR(ASCII 13) che LF(ASCII 10) alla fine della riga...
Il mio problema e' quindi come leggere correttamente riga per riga questo file con una macro VB in excel?

grazie
ciao

MarcoGG
27-04-2009, 10:42
Ad esempio cosė... :

'ASCII 10 = costante vbLf
'ASCII 13 = costante vbCr

Dim strInput As String
strInput = vbLf & "Stringa Pulita" & vbLf & vbCr

MsgBox strInput

Dim strOutput As String
strOutput = strInput
Dim arrayCharsNA() As Variant
arrayCharsNA = Array(vbLf, vbCr)
Dim i As Integer
For i = 0 To UBound(arrayCharsNA)
strOutput = Replace(strOutput, arrayCharsNA(i), "")
Next i

MsgBox strOutput

arrayCharsNA contiene tutti i caratteri indesiderati da eliminare.
Meglio se parametrizzata in una Function... ;)

frizzo28
27-04-2009, 13:51
Ad esempio cosė... :

'ASCII 10 = costante vbLf
'ASCII 13 = costante vbCr

Dim strInput As String
strInput = vbLf & "Stringa Pulita" & vbLf & vbCr

MsgBox strInput

Dim strOutput As String
strOutput = strInput
Dim arrayCharsNA() As Variant
arrayCharsNA = Array(vbLf, vbCr)
Dim i As Integer
For i = 0 To UBound(arrayCharsNA)
strOutput = Replace(strOutput, arrayCharsNA(i), "")
Next i

MsgBox strOutput

arrayCharsNA contiene tutti i caratteri indesiderati da eliminare.
Meglio se parametrizzata in una Function... ;)

Ti ringrazio per l'aiuto alla fine ho risolto cosi'...:
Comunque mi hai dato una buona idea su come risolvere... alla fine ho risolto cosi':
appo = ""
'Leggo tutto il file
Open ThisWorkbook.Path & "\" & cFilename For Input As #1
Do
Line Input #1, linea

appo = appo & linea & "#END#"

Loop Until EOF(1) = True
Close (1)
'sostituisco tutti i CR che potrebbero dare problemi
appo = Replace(appo, vbCr, "")
'sostituisco i LF con #END# per conoscere la fine dalla riga
appo = Replace(appo, vbLf, "#END#")
'In linee avro' il file linea per linea
Linee() = Split(appo, "#END#")
Lung = UBound(Linee)

conta = Lung
'Qui conto gli a capo alla fine del file per farli ignorare al programma le linee vuote alla fine
Do While conta > 0
If Linee(conta) = "" Then

Lung = Lung - 1
End If
conta = conta - 1
Loop
grazie
ciao;)