Identifier le format d'un fichier texte (UNIX ou DOS)
Bonjour à tous,
Mon objectif est de réaliser une maccro permettant de lire des output de fichiers d'un programme de calcul et de les écrire sur une page Excel.
Or certain de ces fichiers sont issus d'un environnement Unix ainsi je dois d'abord convertir les fichier pour pouvoir les lire sur Windows.
Pour cela j'utilise le code suivant qui permet de remplacer les retour à la ligne VbLf (UNIX) en VbCrLf (DOS) :
Code:
1 2 3 4 5 6 7 8
|
Open sRepertoire & sNomFichier For Binary As #iFile
FileLength = LOF(iFile)
strTemp = String(FileLength, Chr(0))
Get #iFile, 1, strTemp
strTemp = Replace(strTemp, vbLf, vbCrLf)
Put #iFile, 1, strTemp
Close #iFile |
Mon problème est que si le fichier est déjà au format DOS la maccro va rajouter des sauts de lignes supplémentaire, je cherche donc à effectuer cette conversion UNIQUEMENT pour les fichiers au format UNIX.
J'ai essayé la solution suivante pour identifier le format de mon fichier en lisant celui-ci ligne par ligne afin de vérifier si celle-ci contient un saut de ligne de type 'vbCrLf'. Même pour un fichier au format DOS , la variable "DOS" reste toujours à 0.
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
|
'Déclaration variables
Dim i As Long
Dim sRepertoire As String, sNomFichier As String
Dim iFile As Integer
Dim strTemp As String
Dim FileLength As Long
Dim buffer As String
Dim DOS As Integer
'Recherche du chemin vers le fichier dans l'onglet input
sRepertoire = Range("S1_FP").Value
sNomFichier = Range("S1_FN").Value
DOS = 0
'Checking if the file is already in DOS format
iFile = FreeFile
Open sRepertoire & sNomFichier For Input As #iFile
Do Until EOF(iFile)
Line Input #iFile, data
If InStr(data, vbCrLf) <> 0 Then
DOS = 1
End If
Loop
MsgBox (DOS)
Close #iFile
'UNIX file format to DOS:
If DOS = 0 Then
Open sRepertoire & sNomFichier For Binary As #iFile
FileLength = LOF(iFile)
strTemp = String(FileLength, Chr(0))
Get #iFile, 1, strTemp
strTemp = Replace(strTemp, vbLf, vbCrLf)
Put #iFile, 1, strTemp
Close #iFile
End If |
Pourriez vous m'indiquer mes erreurs ou une méthode me permettant de conditionner cette conversion.
En espérant avoir été clair dans l'explication de mon problème, je vous remercie par avance de votre aide.
Cordialement,