changing $/ new line default character
am 18.12.2006 17:03:39 von hollyhawkinsI have a script that reads a directory of all files, and creates an
output file of one file with the contents of each individual file from
the directory. The input is an HL7 file. In each individual file, the
segments were separated with hex "0D", but now the segments have hex
"0A" as the separator. This is causing the perl script to read each
segment as a new line, and insert hex "0D0A" at the end.
=> QUESTION: How can I read in each individual file with all the data,
and write it out as one chunk, as opposed to reading each segment
ending with x"0A" and writing out each line to the output??? Any help
would be greatly appreciated
#!/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
while (
$filename = "$datainpath\\$_";
open (X, "$filename");
while (
### THIS IS WHERE I GET INTO TROUBLE NOW, EACH RECORD IS TREATED AS A
'FILE'
### I HAVE A SAMPLE INPUT FILE AT THE END OF THIS
# {if ($filename != "$datainpath\\99999dummyrec.txt")
{print "\x0B$_\x1C\x0D"};
# }
}
# just wrote all the contents of the files, close the output file
HERE IS AN INPUT FILE: (it seems the editor inserts an extra x"0D"
after the x"0A" - the input file the script is reading just has the
x"0A"
MSH|^~\&|LAB|QWA||226964|2006REC 1
10449||ORU^R01|20061208578891130000|P|2.3|||||||
PID|1|1923975|VD441550||PESTANA^ALMA^G||19500506|F|||||||||| 2269640000212|047441174||||||||||||
NTE|1|TX|NON-FASTING |