2016-07-01 2 views
0

J'ai un script censé vérifier les 4 premiers caractères de chaque ligne. Ça ne fonctionne pas. Je le traitement des documents HL7 qui ressemblent à ceci:Traitement incorrect des lignes dans un document HL7?

MSH|... 
EVN|... 
PID|... 
MSH|... 
EVN|... 
PID|... 
MSH|... 
EVN|... 
PID|... 

et voici mon code:

Dim fso 
Set fso = CreateObject("Scripting.FileSystemObject") 
Set file = fso.OpenTextFile (f.path, 1) 
Do Until file.AtEndOfStream 
    line = file.Readline 
    wscript.echo left(line,4) 
Loop 

Ce produit les éléments suivants:

MSH| 
MSH| 
MSH| 

Y at-il quelque chose que je devrais utiliser en plus Readline?

Répondre

0

Revisité cela pour une autre tâche et trouvé un meilleur moyen. L'ensemble suivant de boucles et de conditions décomposera un fichier .dat rempli de messages HL7 en messages, segments, champs et sous-champs. Cela ne tient pas compte des champs répétitifs (~).

Les deux premiers statuts FOR résolvent le problème d'origine avec les sauts de ligne par rapport aux retours chariot. Il se trouve qu'il y a un lf entre chaque message et un cr entre chaque segment.

Dim fso 
Set fso = CreateObject("Scripting.FileSystemObject") 
file = fso.OpenTextFile(f.path).ReadAll 
for each msg in split(file,vbLf) 
    if msg <> "" then 
     msgType = split(split(msg,"|")(8),"^")(1) 'results in something like A08 
     for each line in split(msg,vbCr) 
      if line <> "" then 
       seg = left(line,3) 'MSH, PID, etc 
       for each field in split(line,"|") 
        if instr(field,"^") > 0 then 
         for each subfield in split(field,"^") 
          'do code here for each subfield 
         next 
        end if 
       next 
      end if 
     next 
    end if 
next 
1

J'ai fini par utiliser la fonctionnalité replace in files de pour remplacer toutes les instances de \r avec \r\n. Cela semble régler le problème.

+1

http://stackoverflow.com/questions/17180739/vbscript-skipline-and-cr-line-endings/17181207#17181207 – sqlab