OVH Cloud OVH Cloud

De CSV vers Txt

1 réponse
Avatar
Toto
Bonjour,

Sauvegarder un fichier csv vers le txt n'est pas vraiement le problème. Ce
que je veux faire, c'est aligner les champs dans le fichier txt.
Pour l'instant les champs sont collés les uns aux autres.

Comment faire pour aligner les champs dans le fichier txt?

Merci de vos réponses

1 réponse

Avatar
michdenis
Bonjour Toto,

Voici une façon de transposer un fichier .csv avec un point-virgule comme séparateur en fichier .txt avec un tab comme
séparateur.

Pour que ton fichier .txt affiche les données en colonne, il faut ajouter un peu de maquillage, le séparateur "Tab" à lui
seul ne peut faire l'affaire que si tes chaînes de caractères ont tous des longueurs similaires ( à deux caractères près).
Comme j'ai supposé que cela ne devait pas être le cas de ton application, la procédure ajoute des espaces. Le nombre
d'espaces ajoutés égales à la chaîne la plus longue moins le nombre de caractères de chaque section.

Tu places ce code dans un module standard.

C:Denis.csv = Chemin et nom fichier .csv à transformer

C:Denis.txt = Chemin et nom fichier que l'on veut obtenir
Le chemin doit exister mais la procédure va créer le fichier
de destination s'il n'existe pas.

25 = Chiffre arbitraire représentant la chaîne la plus longue +1 caractère entre 2 séparateurs.
Tu ouvres ton fichier ... et tu évalues que devrait être cette valeur ...

La dernière ligne de la dernière fonction peut supprimer le fichier source, le cas échéant .

Voici la procédure à lancer ....!
'-----------------------------------------------
Sub TransformerCSVEnTextUtilisantVbTAB22()

'Inspiré de l'auteur Hervé Inisan
LireFichier "C:Denis.csv", "c:Denis.txt", 25

End Sub
'-----------------------------------------------
Function LireFichier(ByVal Source_Csv As String, _
Destination_Txt As String, LongeurChaineMax)

Dim Fso As Object, Stm As Object, LeString As Variant
Dim A As Integer, NleString As String, Nb As Integer

Set Fso = CreateObject("Scripting.FileSystemObject")
If Not Fso.FileExists(Source_Csv) Then
MsgBox "Le fichier [" & Source_Csv & "] n'existe pas !", _
vbExclamation, "Attention"
Exit Function
End If
Set Stm = Fso.GetFile(Source_Csv).OpenAsTextStream(1)
While Not Stm.AtEndOfStream
LeString = Split(Stm.ReadLine, ";")
For A = 0 To UBound(LeString)
Nb = LongeurChaineMax - Len(LeString(A))
LeString(A) = LeString(A) & _
Application.Rept(" ", Nb)
Next
NleString = NleString & Join(LeString, vbTab) & vbCrLf
Écrire Destination_Txt, NleString
Wend
Écrire Destination_Txt, NleString

Stm.Close: Set Stm = Nothing: Set Fso = Nothing
End Function
'-----------------------------------------------
Function Écrire(Fichier As String, Ligne As String)

Dim Fso As Object, Stm As Object
Dim strTemp As String, LeString As Variant

Set Fso = CreateObject("Scripting.FileSystemObject")
Set Stm = Fso.CreateTextFile(Fichier, True)
Stm.WriteLine Ligne
'Élimine (efface sans possibilité de récupération le fichier
'Kill ficher ' au besoin enlève l'apostrophe en début de ligne
Stm.Close: Set Stm = Nothing: Set Fso = Nothing
End Function
'-----------------------------------------------


Salutations!









"Toto" a écrit dans le message de news:
Bonjour,

Sauvegarder un fichier csv vers le txt n'est pas vraiement le problème. Ce
que je veux faire, c'est aligner les champs dans le fichier txt.
Pour l'instant les champs sont collés les uns aux autres.

Comment faire pour aligner les champs dans le fichier txt?

Merci de vos réponses