2010-06-23 6 views
0

J'ai un fichier énorme avec beaucoup de segments HL7. Il doit être divisé en 1000 (ou plus) fichiers plus petits. Puisqu'il a des données HL7, il y a un motif (logique) à suivre. Chaque segment de données commence par "MSH |" et se termine lorsque le segment suivant commence par "MSH |".Windows scripting pour analyser un fichier HL7

Le script doit être basé sur Windows (cmd) ou VBS car je ne peux installer aucun logiciel sur cette machine.

Structure du fichier:

MSH|abc|123|.... 
s2|sdsd|2323| 
... 
.. 
MSH|ns|43|... 
... 
.. 
.. 
MSH|sdfns|4343|... 
... 
.. 
asds|sds 

MSH|sfns|3|... 
... 
.. 
as|ss 

fichier dans l'exemple ci-dessus, doit être divisé en 2 ou 3 fichiers. En outre, les fichiers proviennent d'UNIX, de sorte que les nouvelles lignes doivent rester telles qu'elles sont dans le fichier source.

Une aide?

+0

Si quelqu'un est en train de lire cette recherche d'une solution VB.net, cela prend une chaîne avec de nombreux messages et renvoie des chaînes individuelles (une chaîne par message) ", RegexOptions.Multiline) – bernie2436

Répondre

2

Ceci est un exemple de script que j'ai utilisé pour analyser de gros fichiers hl7 dans des fichiers séparés avec les nouveaux noms de fichiers basés sur le fichier de données. Utilise REBOL qui ne nécessite pas d'installation ie. la version principale ne crée aucune entrée de registre.

J'ai une version plus généralisée qui analyse un répertoire entrant et les divise en fichiers uniques, puis attend le prochain fichier à arriver. ? Regex.Split (stringOfAllMessagesNotBrokenUp, «^(= MSH):

Rebol [ 
    file: %split-hl7.r 
    author: "Graham Chiu" 
    date: 17-Feb-2010 
    purpose: {split HL7 messages into single messages} 
] 

fn: %05112010_0730.dat 
outdir: %05112010_0730/ 

if not exists? outdir [ 
    make-dir outdir 
] 

data: read fn 
cnt: 0 
filename: join copy/part form fn -4 + length? form fn "-" 
separator: rejoin [ newline "MSH"] 
parse/all data [ 
    some [ 
     [ copy result to separator | copy result to end ] 
     (
      write to-file rejoin [ outdir filename cnt ".txt" ] result 
      print "Got result" 
      ?? result 
      cnt: cnt + 1 
     ) 
     1 skip 
    ] 
] 
+0

Merci, je vais voir si je peux comprendre cette nouvelle langue. –

1

HL7 a beaucoup de segments - je suppose que vous savez que votre fichier n'a que des segments MSH. Alors, as-tu essayé d'analyser le fichier pour la chaîne "(newline) MSH |"? Gardez juste un tampon en cours d'exécution et jetez-le dans un fichier de sortie quand il devient trop grand.

+0

Oui c'est ce que je veux faire. J'ai essayé cela en utilisant des commandes DOS, mais je ne pouvais pas aller trop loin. En outre, les nouvelles lignes ne sont pas Windows (CR + LF), ils sont juste CR. Je pourrais trouver une solution en Perl ou en utilisant un TextEditor intelligent. Mais je ne peux pas installer de logiciel sur ce serveur. merci, _U –

+0

Je ne suis pas un expert VBS, mais il semble qu'il supporte les expressions régulières: http://www.aspfree.com/c/a/Windows-Scripting/Regular-Expressions-in-VBScript/ – Greg

+1

J'ai exactement le même problème avec CR LF – userJT

Questions connexes