H
hollyhawkins
I have an hl7 input file where the each segment used to be separated by
a hex "0D", now each segment is separated with a hex "0A". The script
used to read in the whole file as one record instead of parsing it out
segment by segment, which is now happening with new x"0A" at the end of
each segment. How can I change that and have the script read the file
in as one record? Any help would be greatly appreciated. Thank you.
Here is the code:
Sample input - this editor a
#!/usr/local/bin/perl
#This script will read a directory containing individual records, write
their
#data contents to a single output file for input to elink. This was
developed
#for the transactions from QUEST to Logician. Sept 2005 Holly Hawkins
#define the file directory paths
$datainpath = "C:\\YNHH_Files\\Quest\\Quest_IN";
$dataoutpath = "C:\\YNHH_Files\\Quest\\Quest_OUT";
$tempdir = "C:\\YNHH_Files\\Quest\\temp";
$archivedir = "C:\\YNHH_Files\\Quest\\archive";
#open the directory that has the input files
opendir THISDIR, "$datainpath" or die "Serious Error: $!";
#read the names of the individual files into an array "@allfiles"
@allfiles = grep !/^\.\.?$/, readdir THISDIR;
closedir THISDIR;
# the follwing line of code was entered by REV to prevent this script
# from running if the dummyrec is the only file existent in the
directory.
if (@allfiles <= 1) {exit}
#print "size of array: " . @allfiles . ".\n";
#writes the names from the directory to a file in tempdir
open RECORDNAMES, ">$tempdir\\recnames.txt" or die "Serious Error:
$!";
foreach $allfiles (@allfiles) {
# if ($allfiles != '99999dummyrec.txt')
{print RECORDNAMES "$allfiles\n"};
# print "$allfiles\n";
}
#fileout has the names of the records to be deleted
close "$tempdir\\recnames.txt";
# now take the record names in RECORDNAMES,
#and write the contents of the each of the records to another file.
#open dataout.txt for the data from the records
#the >> will open the file if it does not exist, or append to it
#if it is there already
#reopen filenames file as input
open (RECORDNAMES, "$tempdir\\recnames.txt") or die "Serious Error:
$!";
open (OUTFILE, ">>$dataoutpath\\questout.txt") or die "cannot open
questout.txt.\n";
#write to the dataout.txt file
select (OUTFILE);
# Read the file of record names
# open each file
#write contents of file to the dataout.txt OUTFILE
#=>>>>This is the problem - each segment is now read as a separate
record, and written out #=>>>separtley - I want to read the file in one
'chunk".
while (<RECORDNAMES>) {
$filename = "$datainpath\\$_";
open (X, "$filename");
while (<X>)
# {if ($filename != "$datainpath\\99999dummyrec.txt")
{print "\x0B$_\x1C\x0D"};
# }
}
# just wrote all the contents of the files, close the output file
dded an extra "0D" - strip that out if you want to replicate my
problem.
MSH|^~\&|LAB|QWA||226964|2006REC 1
10449||ORU^R01|20061208578891130000|P|2.3|||||||
PID|1|19230|VD441550||TEST^ALMA^G||19500506|F||||||||||2269640000212|047441174||||||||||||
NTE|1|TX|NON-FASTING |
a hex "0D", now each segment is separated with a hex "0A". The script
used to read in the whole file as one record instead of parsing it out
segment by segment, which is now happening with new x"0A" at the end of
each segment. How can I change that and have the script read the file
in as one record? Any help would be greatly appreciated. Thank you.
Here is the code:
Sample input - this editor a
#!/usr/local/bin/perl
#This script will read a directory containing individual records, write
their
#data contents to a single output file for input to elink. This was
developed
#for the transactions from QUEST to Logician. Sept 2005 Holly Hawkins
#define the file directory paths
$datainpath = "C:\\YNHH_Files\\Quest\\Quest_IN";
$dataoutpath = "C:\\YNHH_Files\\Quest\\Quest_OUT";
$tempdir = "C:\\YNHH_Files\\Quest\\temp";
$archivedir = "C:\\YNHH_Files\\Quest\\archive";
#open the directory that has the input files
opendir THISDIR, "$datainpath" or die "Serious Error: $!";
#read the names of the individual files into an array "@allfiles"
@allfiles = grep !/^\.\.?$/, readdir THISDIR;
closedir THISDIR;
# the follwing line of code was entered by REV to prevent this script
# from running if the dummyrec is the only file existent in the
directory.
if (@allfiles <= 1) {exit}
#print "size of array: " . @allfiles . ".\n";
#writes the names from the directory to a file in tempdir
open RECORDNAMES, ">$tempdir\\recnames.txt" or die "Serious Error:
$!";
foreach $allfiles (@allfiles) {
# if ($allfiles != '99999dummyrec.txt')
{print RECORDNAMES "$allfiles\n"};
# print "$allfiles\n";
}
#fileout has the names of the records to be deleted
close "$tempdir\\recnames.txt";
# now take the record names in RECORDNAMES,
#and write the contents of the each of the records to another file.
#open dataout.txt for the data from the records
#the >> will open the file if it does not exist, or append to it
#if it is there already
#reopen filenames file as input
open (RECORDNAMES, "$tempdir\\recnames.txt") or die "Serious Error:
$!";
open (OUTFILE, ">>$dataoutpath\\questout.txt") or die "cannot open
questout.txt.\n";
#write to the dataout.txt file
select (OUTFILE);
# Read the file of record names
# open each file
#write contents of file to the dataout.txt OUTFILE
#=>>>>This is the problem - each segment is now read as a separate
record, and written out #=>>>separtley - I want to read the file in one
'chunk".
while (<RECORDNAMES>) {
$filename = "$datainpath\\$_";
open (X, "$filename");
while (<X>)
# {if ($filename != "$datainpath\\99999dummyrec.txt")
{print "\x0B$_\x1C\x0D"};
# }
}
# just wrote all the contents of the files, close the output file
dded an extra "0D" - strip that out if you want to replicate my
problem.
MSH|^~\&|LAB|QWA||226964|2006REC 1
10449||ORU^R01|20061208578891130000|P|2.3|||||||
PID|1|19230|VD441550||TEST^ALMA^G||19500506|F||||||||||2269640000212|047441174||||||||||||
NTE|1|TX|NON-FASTING |