1 pièce(s) jointe(s)
INPUT - Délimiteur LF non reconnu - solution TextStream objet
Bonjour à tous,
La commande INPUT réserve bien des surprises... La dernière en date, elle n'interprète pas LF comme le caractère de fin de ligne. Il existe de nombreux posts sur le sujet et l'explication donnée est que ce type de fichier est celui du monde NON WINDOWS.
Voir
RESOLVED-Cannot-read-a-file-line-by-line
Ici extrait ci-dessous
- a LF without a CR is UNIX, Linux, AmigaOS and now Mac -
- since Mac OS X.
- Until Mac OS version 9 the Mac was usung a single CR without
- a LF. Same for the Apple II.
- CR+LF is Windows, DOS, OS/2, CP/M, Atari TOS.
Citation:
For the old teletypes you needed both CR + LF.
In the mid-seventies I saw a program using a teletype as "printer".
They used multiple CR without a LF to write columns.
With a teletype you had to send first the CR (carriage return) then
the LF (line feed) due to the latency time of the mechanical equipment.
If you did it the other way, the first character of the new line was
printed somewhere to the right, not in the leftmost position.
Helmut.
Je joins un fichier pour test et une routine pour vérification et la solution => l'utilisation de l'objet Objets TextStream
Pièce jointe 535589
Et la routine pour vérif.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
| Public Function fReadflatFile()
Dim fso As New FileSystemObject '-> Objet TextStream => librairie Microsoft Scripting Runtime
Dim ts As TextStream
Dim iIdxFic As Integer, iIdx As Integer
Dim sLigne As String, sPath As String, sFile As String, sPathFile As String
Dim vSplit As Variant
sPath = "d:\"
sFile = "test.txt"
sPathFile = sPath & sFile
iIdxFic = FreeFile
Open sPathFile For Input As iIdxFic
While Not EOF(iIdxFic)
Line Input #iIdxFic, sLigne
vSplit = Split(sLigne, ";")
For iIdx = 0 To UBound(vSplit) - 1 '-> UBound retourne 12 car n'identifie qu'une seule ligne
Debug.Print vSplit(iIdx)
Next
Wend
Close iIdxFic
'--------------------------------------------------------------
' LA SOLUTION
'--------------------------------------------------------------
Set ts = fso.OpenTextFile(sPathFile)
Do While Not ts.AtEndOfStream
sLigne = ts.ReadLine
vSplit = Split(sLigne, ";")
For iIdx = 0 To UBound(vSplit) - 1
Debug.Print vSplit(iIdx)
Next
Loop
ts.Close
Exit_:
Set fso = Nothing
Exit Function
Err_:
MsgBox Err.Number & Chr(13) & Err.Description, vbCritical, "critical error messaage"
GoTo Exit_
End Function |