OVH Cloud OVH Cloud

Format DOS-UNIX

4 réponses
Avatar
Majid
Bonjour,

J'ai des fichiers que j'ai téléchargé par FTP d'un serveur UNIX
Le problème c'est que quand j'essai de les ouvrir sous windows les retours à
la ligne disparaissent.
J'aimerais savoir s'il y a moyen de les transformer directement au format
DOS.

J'aimerais savoir aussi comment lire un fichier ligne par ligne, ou
caractère par caractère avec VB.

Merci pour vos réponses.

4 réponses

Avatar
ng
Salut,

Voici comment effectuer la conversion Unix->Windows (Qu'entends tu par Dos ?
Pour les caractères spéciaux ?)

Dim k as Integer, sBuff as String, tblLignes() as String
k=freefile
Open "c:fichier_unix.txt" for binary as #k
sBuff=Space$(LOF(k))
Get #k,,sBuff
Close #k
'conversion
sBuff=Replace(sBuff, vbLf, vbCrLf, , , vbTextCompare)
'lecture ligne par ligne
if sBuff Like "*" & vbCrLf & "*" Then
tblLignes= Split(sBuff, vbCrLf, , vbTextCompare)
for k=0 to ubound(blLignes)
'ligne contenue dans blLignes(i)
Next
Else
'une seule ligne qui est ds sBuff
End If

sBuff=""
Erase blLignes


Sinon caractère par caractère, même code mais à la place du "if sbuff
like..." :
dim sChar as string*1
For k=1 to len(sbuff)
sChar=Mid$(sBuff, k, 1)
Next

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/


"Majid" a écrit dans le message de news:
OIBYXNH#
Bonjour,

J'ai des fichiers que j'ai téléchargé par FTP d'un serveur UNIX
Le problème c'est que quand j'essai de les ouvrir sous windows les retours


à
la ligne disparaissent.
J'aimerais savoir s'il y a moyen de les transformer directement au format
DOS.

J'aimerais savoir aussi comment lire un fichier ligne par ligne, ou
caractère par caractère avec VB.

Merci pour vos réponses.




Avatar
François Picalausa
Bonjour/soir,

Voici un exemple qui répond à tes trois questions:
Option Explicit

'Un textbox, multiline, de nom text1
'Trois command button
' Command1
' Command2
' Command3

Private Sub Command1_Click()
Dim FFN As Integer, strBuffer As String

'Récupère un nouveau numéro de fichier
FFN = FreeFile

'Vide le textbox
Text1.Text = ""

Open "c:autoexec.bat" For Binary As #FFN
'Lecture caractère par caractère:
strBuffer = vbNullChar

Do While Not EOF(FFN)
Get FFN, , strBuffer
'Ajoute le caractère dans le textbox
Text1.SelStart = Len(Text1.Text)
Text1.SelText = strBuffer
Loop
Close FFN
End Sub

Private Sub Command2_Click()
Dim FFN As Integer, strBuffer As String, strLines() As String
Dim i As Long

'Récupère un nouveau numéro de fichier
FFN = FreeFile

'Vide le textbox
Text1.Text = ""

'Possibilité d'utilise Open For Input et
'Line Input mais c'est plus lent à l'exécution
Open "c:autoexec.bat" For Binary As #FFN
'Lecture caractère par caractère:
strBuffer = String$(LOF(FFN), vbNullChar)
Get FFN, , strBuffer
Close FFN

'Converti les crlf en lf
'converti les cr en crlf
'Converti les lf en crlf
' => crlf, lf et cr deviennent crlf
'découpe le fichier suivant les crlf
strLines = Split(Replace(Replace(Replace(strBuffer, vbCrLf, vbLf), vbCr,
vbCrLf), vbLf, vbCrLf), vbCrLf)

For i = LBound(strLines) To UBound(strLines)
'Si une ligne commence par PATH If Left$(strLines(i), 5) = "PATH=" Then
'Ajoute le caractère dans le textbox
Text1.SelStart = Len(Text1.Text)
Text1.SelText = strLines(i) & vbCrLf
End If
Next i
End Sub

Private Sub Command3_Click()
Dim FFN As Integer, strBuffer As String

'Récupère un nouveau numéro de fichier
FFN = FreeFile

'Vide le textbox
Text1.Text = ""

Open "c:autoexec.bat" For Binary As #FFN
'Lecture caractère par caractère:
strBuffer = String$(LOF(FFN), vbNullChar)
Get FFN, , strBuffer
Close FFN

'Voir explication command2
Text1.Text = Replace(Replace(Replace(strBuffer, vbCrLf, vbLf), vbCr,
vbCrLf), vbLf, vbCrLf)
End Sub

Private Sub Form_Load()
Command1.Caption = "Lecture par caractère/caractère"
Command2.Caption = "Lecture complète puis traitement ligne/ligne"
Command3.Caption = "Conversion des cr et lf simples (UNIX) en crlf
(WINDOWS)"
End Sub

--
François Picalausa (MVP VB)
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com


"Majid" a écrit dans le message de
news:OIBYXNH%
Bonjour,

J'ai des fichiers que j'ai téléchargé par FTP d'un serveur UNIX
Le problème c'est que quand j'essai de les ouvrir sous windows les
retours à la ligne disparaissent.
J'aimerais savoir s'il y a moyen de les transformer directement au
format DOS.

J'aimerais savoir aussi comment lire un fichier ligne par ligne, ou
caractère par caractère avec VB.

Merci pour vos réponses.


Avatar
Majid
Oui Je veux dire les caractères spéciaux dont le retours à la ligne par
exemple (et surtout)
Je vais tester ton code
Je te remercie enormément


"ng" wrote in message
news:##aDXSH#
Salut,

Voici comment effectuer la conversion Unix->Windows (Qu'entends tu par Dos


?
Pour les caractères spéciaux ?)

Dim k as Integer, sBuff as String, tblLignes() as String
k=freefile
Open "c:fichier_unix.txt" for binary as #k
sBuff=Space$(LOF(k))
Get #k,,sBuff
Close #k
'conversion
sBuff=Replace(sBuff, vbLf, vbCrLf, , , vbTextCompare)
'lecture ligne par ligne
if sBuff Like "*" & vbCrLf & "*" Then
tblLignes= Split(sBuff, vbCrLf, , vbTextCompare)
for k=0 to ubound(blLignes)
'ligne contenue dans blLignes(i)
Next
Else
'une seule ligne qui est ds sBuff
End If

sBuff=""
Erase blLignes


Sinon caractère par caractère, même code mais à la place du "if sbuff
like..." :
dim sChar as string*1
For k=1 to len(sbuff)
sChar=Mid$(sBuff, k, 1)
Next

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/


"Majid" a écrit dans le message de news:
OIBYXNH#
> Bonjour,
>
> J'ai des fichiers que j'ai téléchargé par FTP d'un serveur UNIX
> Le problème c'est que quand j'essai de les ouvrir sous windows les


retours
à
> la ligne disparaissent.
> J'aimerais savoir s'il y a moyen de les transformer directement au


format
> DOS.
>
> J'aimerais savoir aussi comment lire un fichier ligne par ligne, ou
> caractère par caractère avec VB.
>
> Merci pour vos réponses.
>
>




Avatar
Majid
C'est exactement ce que je cherchais, et ca marche à merveille
Je vous remercie les gars :)



"François Picalausa" wrote in message
news:#F2SAZH#
Bonjour/soir,

Voici un exemple qui répond à tes trois questions:
Option Explicit

'Un textbox, multiline, de nom text1
'Trois command button
' Command1
' Command2
' Command3

Private Sub Command1_Click()
Dim FFN As Integer, strBuffer As String

'Récupère un nouveau numéro de fichier
FFN = FreeFile

'Vide le textbox
Text1.Text = ""

Open "c:autoexec.bat" For Binary As #FFN
'Lecture caractère par caractère:
strBuffer = vbNullChar

Do While Not EOF(FFN)
Get FFN, , strBuffer
'Ajoute le caractère dans le textbox
Text1.SelStart = Len(Text1.Text)
Text1.SelText = strBuffer
Loop
Close FFN
End Sub

Private Sub Command2_Click()
Dim FFN As Integer, strBuffer As String, strLines() As String
Dim i As Long

'Récupère un nouveau numéro de fichier
FFN = FreeFile

'Vide le textbox
Text1.Text = ""

'Possibilité d'utilise Open For Input et
'Line Input mais c'est plus lent à l'exécution
Open "c:autoexec.bat" For Binary As #FFN
'Lecture caractère par caractère:
strBuffer = String$(LOF(FFN), vbNullChar)
Get FFN, , strBuffer
Close FFN

'Converti les crlf en lf
'converti les cr en crlf
'Converti les lf en crlf
' => crlf, lf et cr deviennent crlf
'découpe le fichier suivant les crlf
strLines = Split(Replace(Replace(Replace(strBuffer, vbCrLf, vbLf),


vbCr,
vbCrLf), vbLf, vbCrLf), vbCrLf)

For i = LBound(strLines) To UBound(strLines)
'Si une ligne commence par PATH > If Left$(strLines(i), 5) = "PATH=" Then
'Ajoute le caractère dans le textbox
Text1.SelStart = Len(Text1.Text)
Text1.SelText = strLines(i) & vbCrLf
End If
Next i
End Sub

Private Sub Command3_Click()
Dim FFN As Integer, strBuffer As String

'Récupère un nouveau numéro de fichier
FFN = FreeFile

'Vide le textbox
Text1.Text = ""

Open "c:autoexec.bat" For Binary As #FFN
'Lecture caractère par caractère:
strBuffer = String$(LOF(FFN), vbNullChar)
Get FFN, , strBuffer
Close FFN

'Voir explication command2
Text1.Text = Replace(Replace(Replace(strBuffer, vbCrLf, vbLf), vbCr,
vbCrLf), vbLf, vbCrLf)
End Sub

Private Sub Form_Load()
Command1.Caption = "Lecture par caractère/caractère"
Command2.Caption = "Lecture complète puis traitement ligne/ligne"
Command3.Caption = "Conversion des cr et lf simples (UNIX) en crlf
(WINDOWS)"
End Sub

--
François Picalausa (MVP VB)
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com


"Majid" a écrit dans le message de
news:OIBYXNH%
> Bonjour,
>
> J'ai des fichiers que j'ai téléchargé par FTP d'un serveur UNIX
> Le problème c'est que quand j'essai de les ouvrir sous windows les
> retours à la ligne disparaissent.
> J'aimerais savoir s'il y a moyen de les transformer directement au
> format DOS.
>
> J'aimerais savoir aussi comment lire un fichier ligne par ligne, ou
> caractère par caractère avec VB.
>
> Merci pour vos réponses.