Fin de ligne fichier texte format windows ou unix

cs_gedy Messages postés 6 Date d'inscription dimanche 27 juillet 2003 Statut Membre Dernière intervention 26 janvier 2006 - 17 janv. 2005 à 20:51
Nic0s Messages postés 10 Date d'inscription vendredi 2 avril 2004 Statut Membre Dernière intervention 18 décembre 2008 - 8 avril 2010 à 16:35
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

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
17 janv. 2005 à 23:53
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)
0
cs_gedy Messages postés 6 Date d'inscription dimanche 27 juillet 2003 Statut Membre Dernière intervention 26 janvier 2006
18 janv. 2005 à 19:25
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...
0
Nic0s Messages postés 10 Date d'inscription vendredi 2 avril 2004 Statut Membre Dernière intervention 18 décembre 2008
8 avril 2010 à 16:35
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
0
Rejoignez-nous