2009-12-08 5 views
1

Je travaille dans la zone EDI et souhaiterais de l'aide avec une macro EDIFACT pour rendre les fichiers EDIFACT plus lisibles.Macro EDIFACT (structure de message lisible)

Le message ressemble à ceci:

data'data'data'data' 

Je voudrais avoir la macro conversion de la structure:

data' 
data' 
data' 
data' 

Pls me faire savoir comment faire cela. Merci d'avance!

BR Jonas

+0

Dans quelle application seriez-vous d'écrire une macro? –

Répondre

2

Si vous voulez simplement afficher les fichiers dans un format plus lisible, essayez de télécharger le Softshare EDI Notepad. C'est un outil assez bon pour cela, il supporte les standards X12, EDIFACT et TRADACOMS, et c'est gratuit.

0

Est-ce ce que vous cherchez?

Option Explicit 

Dim stmOutput: Set stmOutput = CreateObject("ADODB.Stream") 
stmOutput.Open 
stmOutput.Type = 2 'adTypeText 
stmOutput.Charset = "us-ascii" 

Dim stm: Set stm = CreateObject("ADODB.Stream") 
stm.Type = 1 'adTypeBinary 
stm.Open 
stm.LoadFromFile "EDIFACT.txt" 

stm.Position = 0 
stm.Type = 2 'adTypeText 
stm.Charset = "us-ascii" 

Dim c: c = "" 
Do Until stm.EOS 
    c = stm.ReadText(1) 
    Select Case c 
    Case Chr(39) 
     stmOutput.WriteText c & vbCrLf 
    Case Else 
     stmOutput.WriteText c 
    End Select 
Loop 


stm.Close 
Set stm = Nothing 

stmOutput.SaveToFile "EDIFACT.with-CRLF.txt" 
stmOutput.Close 
Set stmOutput = Nothing 

WScript.Echo "Done." 
2

Remplacement de VIM (en supposant que les séparateurs standard EDIFACT/caractères d'échappement pour le jeu de caractères UNOA sont en cours d'utilisation):

:s/\([^?]'\)\(.\)/\1\r\2/g 

Briser la regex:
\([^?]'\) - chercher ' qui se produit après n'importe quel caractère sauf ? (le caractère d'échappement standard) et capture ces deux caractères comme le premier atome. Ce sont les deux derniers caractères de chaque segment.
\(.\) - Capturer un caractère unique à la suite de la terminaison de segment (.-À-dire ne correspondent pas si la terminaison de segment est déjà à l'extrémité d'une ligne)

revisser les matchs sur cette ligne avec une nouvelle ligne entre le segment terminateur et le début du segment suivant.

Sinon, vous pourriez finir avec ceci:

... 
FTX+AAR+++FORWARDING?: Freight under Vendor?' 
s care.' 
NAD+BY+9312345123452' 
CTA+PD+0001:Terence Trent D?' 
Arby' 
... 

au lieu de ceci:

... 
FTX+AAR+++FORWARDING?: Freight under Vendor?'s care .' 
NAD+BY+9312345123452' 
CTA+PD+0001:Terence Trent D?'Arby' 
... 
Questions connexes