Fin de ligne fichier texte format windows ou unix

Signaler
Messages postés
6
Date d'inscription
dimanche 27 juillet 2003
Statut
Membre
Dernière intervention
26 janvier 2006
-
Nic0s
Messages postés
10
Date d'inscription
vendredi 2 avril 2004
Statut
Membre
Dernière intervention
18 décembre 2008
-
Bonjour,

Comment faire pour ouvrir un fichier texte, non pas terminé par CR+LF (0D-0A), mais uniquement par LF (0A) sans passer par le mode binaire. En fait choisir la fin de ligne d'un fichier texte.
Dans l'aide des contantes il existe vbNewLine avec comme descriptions : choix en fonction de la plate-forme. Mais aucune autre explication.

D'avance merci pour votre aide.

3 réponses

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
64
Salut
vbNewLine ne permet que provoquer un changement de ligne en utilisant soit LF (LineFeed), soit CRLF (CarriageReturn + LineFeed) en fonction du système sur lequel il est.
vbNewLine représente un ou des caractères à l'écriture, il ne s'agit pas d'une option de sélection.
Mais la lecture d'une fichier Unix (avec CR) n'est pas une grosse diffculté en VB :
- Charger tout le fichier dans une variable texte :
Open "Fichier" Access Binary As #1
' Dimensionner un chaine de la même longueur avant de lire
Chaine = String(LOF(1), " ")
' Lire tout le fichier d'un coup
Get #1, , Chaine
Close #1

- Pour dissocier les lignes, il faut repérer s'il y a un LF derrière un CR
' Par défaut, décide LF
Séparateur = vbLf
r = Instr(1, Chaine, vbLf)
' Si Cr devant Lf, on change de séparateurIf r And Mid(Chaine, r - 1, 1) vbCr Then Séparateur vbCrLf
Dim Lignes() As String
Lignes = Split(Chaine, Séparateur)

Voilà, tu as chaque ligne du texte dans un tableau.
La première ligne est dans Lignes(0) et il y a "UBound(Lignes) + 1" lignes dans ce texte

Vala
Jack
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage. (Socrate)
Messages postés
6
Date d'inscription
dimanche 27 juillet 2003
Statut
Membre
Dernière intervention
26 janvier 2006

Merci de ton aide.

J'ai fait un essai, une fois déclarer la variable chaine, j'ai récupérer mes lignes dans le tableau Lignes.
Mon but est de remplacer vblf par vbcrlf donc voici mon code :

Dim Chaine As String
Dim nb As Long
Dim Séparateur As String
Dim Lignes() As String


Open "Fichier1" For Binary As #1
' Dimensionner un chaine de la même longueur avant de lire
Chaine = String(LOF(1), " ")
' Lire tout le fichier d'un coup
Get #1, , Chaine
Close #1

'Ouvre nouveau fichier pour sauvegarde
Open "Fichier2" For Output As #1

'Supprime les vbLf
Lignes = Split(Chaine, vbLf)

'Ecriture dans nouveau fichier
For x = 0 To UBound(Lignes) - 1
Write #1, Lignes(x)
Next x


Close #1

, mais dans le fichier2 les débuts et fin de lignes contiennent des "

Un problème en cache un autre...
Messages postés
10
Date d'inscription
vendredi 2 avril 2004
Statut
Membre
Dernière intervention
18 décembre 2008

je ressort ce vieux message mais je suis tomber plus ou moins sur le meme souci , et voici ma resolution:
Sub repareFile(filepath As String)
Dim Chaine As String
Dim nb As Long
Dim Séparateur As String
Dim ifile As Integer
Dim Lignes() As String
Dim pos As Integer


ifile = FreeFile


Open filepath For Binary As #ifile
' Dimensionner un chaine de la même longueur avant de lire
Chaine = String(LOF(1), " ")
' Lire tout le fichier d'un coup
Get #ifile, , Chaine
Close #ifile

ifile = FreeFile
'Ouvre nouveau fichier pour sauvegarde
Open filepath For Output As #ifile

'Supprime les vbLf
Lignes = Split(Chaine, vbLf)

'Ecriture dans nouveau fichier
For X = 0 To UBound(Lignes) - 1
    ' on localise le premier vbCR rencontré 
    pos = InStr(1, Lignes(X), vbCr)
    If pos <> 0 Then
     Print #ifile, Mid(Lignes(X), 1, pos - 1)
    End If
Next X

Close #ifile





End Sub