2017-03-08 1 views
1

Je souhaite modifier un fichier .dtf (fichier IBM Data Transfer) via VBA. L'ouvrir en Excel me cause des problèmes alors j'espérais lire le fichier ligne par ligne et l'exporter vers un nouveau fichier .dtf. Mais quelque chose va mal lorsque je tente de Print #1 la chaîne à la .dtfEXCEL VBA lecture/écriture. Fichier dft (IBM Data Tranfer)

INPUT

OUPUT

Sub test() 
    Dim TemplateFilePath As String 
    TemplateFilePath = "C:\TemplateFile.dtf" 
    Call CreateDataTranderFile(TemplateFilePath) 
End Sub 



Public Sub CreateDataTranderFile(TemplateFilePath As String) 
    Dim output As String 
    Dim OutFullPath As String 
    Dim Line As String 
    Dim FileNum As Integer 

    OutFullPath = "C:\tmpTranferfile.dtf" 


    'Read from template 
    FileNum = FreeFile() 
    Open TemplateFilePath For Input As #FileNum 
     While Not EOF(FileNum) 
      Line Input #FileNum, Line 
      output = output & Line 
     Wend 
    Close #FileNum 

    'Write .dtf 
    Open OutFullPath For Output As #1 
     Print #1, output 
    Close 
End Sub 
+0

Avec sortie = sortie & Line vous sautez CRLF. Est-ce intentionnel? Bien que je ne crois pas que cela ait quelque chose à voir avec votre problème. Pouvez-vous vérifier quel est le codage de votre fichier d'entrée? – Storax

+0

Je suppose que l'encodage de votre fichier d'entrée est UNICODE, non? – Storax

+1

En effet était UNICODE. Juste appris à vérifier http://stackoverflow.com/questions/6947749/how-to-check-if-a-txt-file-is-in-ascii-or-utf-8-format-in-windows-environment – BuckTurgidson

Répondre

2

Donc, je suppose que votre fichier d'entrée est un fichier UNICODE vous coud utilisez la fonction suivante

Function ReadUniCodeTextFile(inpFile As String) As String 

Dim sText As String 
Dim objFSO As Object 
Dim objFile As Object 

    Set objFSO = CreateObject("Scripting.FileSystemObject") 
    Set objFile = objFSO.OpenTextFile(inpFile, 1, False, -1) 
    ReadUniCodeTextFile = objFile.ReadAll 
    objFile.Close 

End Function 

Et remplacer

'Read from template 
    FileNum = FreeFile() 
    Open TemplateFilePath For Input As #FileNum 
     While Not EOF(FileNum) 
      Line Input #FileNum, Line 
      output = output & Line 
     Wend 
    Close #FileNum 

juste avec

output = ReadUniCodeTextFile(TemplateFilePath) 

Donc, votre code devrait ressembler à ceci alors

Public Sub CreateDataTranderFile(TemplateFilePath As String) 
Dim output As String 
Dim OutFullPath As String 
Dim Line As String 
Dim FileNum As Integer 

    OutFullPath = "C:\tmpTranferfile.dtf" 

    'Read from template 
    output = ReadUniCodeTextFile(TemplateFilePath) 

    'Write .dtf 
    Open OutFullPath For Output As #1 
    Print #1, output 
    Close 
End Sub