我可以使用 WIndows 批处理文件从此文本文件中的数据填充数组吗?

问题描述 投票:0回答:1

与我合作的客户更改了 EHR,新的 EHR 更改了需要导入到其计费系统中的文本格式。

以下是新的文件格式:

"Patient Class","Hosp Acct","MRN","SSN","Patient Name","Pt Suffix","DOB","Sex","Marital Status","Street Address","City","State","ZIP Code","Phone","Pt. E-mail Address","Patient Employer","Employer Address","Emp City","Emp State","Emp ZIP Code","Emp Phone","Guarantor First","Guarantor Last","Guarantor Middle","Guarantor Relation","Guarantor Address","Guar City","Guar State","Guar ZIP","Primary Plan","Primary Subsc ID","Primary CVG Sub Name","Primary Cvg Sub Sex","Primary Cvg Sub DOB","Primary Cvg Mem Rel to Sub","Primary Cvg Sub Address","Primary Cvg Sub City","Primary Cvg Sub State","Primary CVG Sub ZIP","Primary CVG Group Num","Cvg 1 Auth Num","Primary CVG Address 1","Primary CVG City","Primary CVG State","Primary CVG ZIP","Primary Cvg Sub Phone","Secondary Plan","Secondary Subsc ID","Secondary CVG Sub Name","Secondary Cvg Sub Sex","Secondary Cvg Sub DOB","Secondary Cvg Mem Rel to Sub","Secondary Cvg Sub Address","Secondary Cvg Sub City","Secondary Cvg Sub State","Secondary CVG Sub ZIP","Secondary CVG Group Num","Cvg 2 Auth Num","Secondary CVG Address 1","Secondary CVG City","Secondary CVG State","Secondary CVG ZIP","Secondary Cvg Sub Phone","Tertiary Plan","Tertiary Subsc ID","Tertiary CVG Sub Name","Tertiary Cvg Sub Sex","Tertiary Cvg Sub DOB","Tertiary Cvg Mem Rel to Sub","Tertiary Cvg Sub Address","Tertiary Cvg Sub City","Tertiary Cvg Sub State","Tertiary CVG Group Num","Cvg 3 Auth Num","Tertiary CVG Address 1","Tertiary CVG City","Tertiary CVG State","Tertiary CVG ZIP","Tertiary Cvg Sub Phone","Quaternary Payor","Quaternary Subsc ID","Quat Cvg Subscr Nm","Quat Cvg Subscr Sex","Quat Cvg Subscr DOB","Quat Cvg Subscr Rel to Pt","Quat Cvg Subscr Addr","Quat Cvg Subscr City","Quat Cvg Subscr State","Quat Cvg Subscr ZIP Code","Quat Cvg Subscr Phone Num","Quat Cvg Grp Num","Cvg 4 Auth Num","Quat Cvg Addr Ln 1","Quat Cvg City","Quat Cvg State","Quat Cvg ZIP Code","Quat Cvg Phone Num"

客户端的计费软件设置为读取以竖线分隔的 .txt 文件,例如:

EncProv|Hospital_Patient_Account_Number|Medical_Record_Number|Surgery_Date|Patient_Last_Name|Patient_First_Name|Patient_Middle_Initial|Patient_Social_Security_Number|Patient_Date_Of_Birth|Patient_Address|Patient_Address_Line_2|Patient_City|Patient_State|Patient_Zip_Code|Patient_Country|Patient_Phone_Number|Patient_Work_Phone_Number|Patient_Work_Phone_Extension|Patient_Gender|Patient_Marital_Status_Code|Patient_Type_Code|Patient_Type_Description|Patient_Admission_Date|Patient_Discharge_Date|Patient_Employer_Name|Patient_Empoyer_Address|Patient_Employer_City|Patient_Employer_State|Patient_Employer_Zip|Patient_Employer_Country|Guarantor_Patient_Relationship_To_Gurantor_Code|Guarantor_Patient_Relationship_To_Guarantor_Description|Guarantor_Last_Name|Guarantor_First_Name|Guarantor_Middle_Intitial|Guarantor_Address|Guarantor_Address_Line_2|Guarantor_City|Guarantor_State|Guarantor_Zip_Code|Guarantor_Country|Guarantor_Social_Security_Number|Guarantor_Phone_Number|Guarantor_Work_Phone_Number|Guarantor_Work_Phone_Extension|Guarantor_Gender|Guarantor_Date_Of_Birth|Guarantor_Employer_Name|Guarantor_Empoyer_Address|Guarantor_Employer_City|Guarantor_Employer_State|Guarantor_Employer_Zip|Guarantor_Employer_Country|Primary_Hospital_Carrier_Code|Primary_Carrier_Name|Primary_Carrier_Mnemonic|Primary_Carrier_Address|Primary_Carrier_Address_Line_2|Primary_Carrier_City|Primary_Carrier_State|Primary_Carrier_Zip_Code|Primary_Carrier_Policy_Number|Primary_Carrier_Group_Number|Primary_Carrier_Patient_Relationship_To_Subscriber_Code|Primary_Carrier_Patient_Relationship_To_Subscriber_Desc|Primary_Carrier_Policy_Holder_Last_Name|Primary_Carrier_Policy_Holder_First_Name|Primary_Carrier_Policy_Holder_Middle_Initial|Primary_Carrier_Policy_Holder_Address|Primary_Carrier_Policy_Holder_Address_Line_2|Primary_Carrier_Policy_Holder_City|Primary_Carrier_Policy_Holder_State|Primary_Carrier_Policy_Holder_Zip_Code|Primary_Carrier_Policy_Holder_Country|Primary_Carrier_Policy_Holder_Social_Security_Number|Primary_Carrier_Policy_Holder_Phone_Number|Primary_Carrier_Policy_Holder_Work_Phone_Number|Primary_Carrier_Policy_Holder_Gender|Primary_Carrier_Policy_Holder_Date_Of_Birth|Primary_Carrier_Policy_Holder_Employer_Name|Primary_Carrier_Policy_Holder_Empoyer_Address|Primary_Carrier_Policy_Holder_Employer_City|Primary_Carrier_Policy_Holder_Employer_State|Primary_Carrier_Policy_Holder_Employer_Zip|Primary_Carrier_Policy_Holder_Employer_Country|Secondary_Hospital_Carrier_Code|Secondary_Carrier_Name|Secondary_Carrier_Mnemonic|Secondary_Carrier_Address|Secondary_Carrier_Address_Line_2|Secondary_Carrier_City|Secondary_Carrier_State|Secondary_Carrier_Zip_Code|Secondary_Carrier_Policy_Number|Secondary_Carrier_Group_Number|Secondary_Carrier_Patient_Relationship_To_Subscriber_Code|Secondary_Carrier_Patient_Relationship_To_Subscriber_Desc|Secondary_Carrier_Policy_Holder_Last_Name|Secondary_Carrier_Policy_Holder_First_Name|Secondary_Carrier_Policy_Holder_Middle_Initial|Secondary_Carrier_Policy_Holder_Address|Secondary_Carrier_Policy_Holder_Address_Line_2|Secondary_Carrier_Policy_Holder_City|Secondary_Carrier_Policy_Holder_State|Secondary_Carrier_Policy_Holder_Zip_Code|Secondary_Carrier_Policy_Holder_Country|Secondary_Carrier_Policy_Holder_Social_Security_Number|Secondary_Carrier_Policy_Holder_Phone_Number|Secondary_Carrier_Policy_Holder_Work_Phone_Number|Secondary_Carrier_Policy_Holder_Gender|Secondary_Carrier_Policy_Holder_Date_Of_Birth|Secondary_Carrier_Policy_Holder_Employer_Name|Secondary_Carrier_Policy_Holder_Empoyer_Address|Secondary_Carrier_Policy_Holder_Employer_City|Sedondary_Carrier_Policy_Holder_Employer_State|Secondary_Carrier_Policy_Holder_Employer_Zip|Secondary_Carrier_Policy_Holder_Employer_Country|Tertiary_Hospital_Carrier_Code|Tertiary_Carrier_Name|Tertiary_Carrier_Mnemonic|Tertiary_Carrier_Address|Tertiary_Carrier_Address_Line_2|Tertiary_Carrier_City|Tertiary_Carrier_State|Tertiary_Carrier_Zip_Code|Tertiary_Carrier_Policy_Number|Tertiary_Carrier_Group_Number|Tertiary_Carrier_Patient_Relationship_To_Subscriber_Code|Tertiary_Carrier_Patient_Relationship_To_Subscriber_Desc|Tertiary_Carrier_Policy_Holder_Last_Name|Tertiary_Carrier_Policy_Holder_First_Name|Tertiary_Carrier_Policy_Holder_Middle_Initial|Tertiary_Carrier_Policy_Holder_Address|Tertiary_Carrier_Policy_Holder_Address_Line_2|Tertiary_Carrier_Policy_Holder_City|Tertiary_Carrier_Policy_Holder_State|Tertiary_Carrier_Policy_Holder_Zip_Code|Tertiary_Carrier_Policy_Holder_Country|Tertiary_Carrier_Policy_Holder_Social_Security_Number|Tertiary_Carrier_Policy_Holder_Phone_Number|Tertiary_Carrier_Policy_Holder_Work_Phone_Number|Tertiary_Carrier_Policy_Holder_Gender|Tertiary_Carrier_Policy_Holder_Date_Of_Birth|Tertiary_Carrier_Policy_Holder_Employer_Name|Tertiary_Carrier_Policy_Holder_Empoyer_Address|Tertiary_Carrier_Policy_Holder_Employer_City|Tertiary_Carrier_Policy_Holder_Employer_State|Tertiary_Carrier_Policy_Holder_Employer_Zip|Tertiary_Carrier_Policy_Holder_Employer_Country|Rendering_Performing_Doctor_Last_Name|Rendering_Performing_Doctor_First_Name|Rendering_Performing_Doctor_Middle_Initial|Rendering_Performing_Doctor_NPI_Number

我想编写一个批处理文件,将逗号和引号分隔值转换为管道分隔值。

如果我使用数组,我可以轻松地根据需要重新排序数据以匹配原始文件。

看来我应该能够编写一个批处理文件,该文件可以获取第一个文本文件中引号之间的数据,并用它填充一个数组。

然后我所要做的就是通过从数组中输出数据来按照我需要的顺序输出数据,如下所示:

echo off

call :sub >output.txt
:sub

set a[0]=1 
set a[1]=2 
set a[2]=3 
echo ^| %a[0]% ^| %a[1]% ^| %a[2]%

exit /b

但是,如何使用上面第一个文本文件中用引号分隔的值填充数组?

我试图找到将文本文件的行导入批处理文件的示例,但我没有找到任何只从引号之间获取变量的内容,就像我给出的文件一样。

arrays batch-file populate
1个回答
0
投票
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION 

SET "newformat="Patient Class","Hosp Acct","MRN","SSN","Patient Name","Pt Suffix","DOB","Sex","Marital Status","Street Address","City","State","ZIP Code","Phone","Pt. E-mail Address","Patient Employer","Employer Address","Emp City","Emp State","Emp ZIP Code","Emp Phone","Guarantor First","Guarantor Last","Guarantor Middle","Guarantor Relation","Guarantor Address","Guar City","Guar State","Guar ZIP","Primary Plan","Primary Subsc ID","Primary CVG Sub Name","Primary Cvg Sub Sex","Primary Cvg Sub DOB","Primary Cvg Mem Rel to Sub","Primary Cvg Sub Address","Primary Cvg Sub City","Primary Cvg Sub State","Primary CVG Sub ZIP","Primary CVG Group Num","Cvg 1 Auth Num","Primary CVG Address 1","Primary CVG City","Primary CVG State","Primary CVG ZIP","Primary Cvg Sub Phone","Secondary Plan","Secondary Subsc ID","Secondary CVG Sub Name","Secondary Cvg Sub Sex","Secondary Cvg Sub DOB","Secondary Cvg Mem Rel to Sub","Secondary Cvg Sub Address","Secondary Cvg Sub City","Secondary Cvg Sub State","Secondary CVG Sub ZIP","Secondary CVG Group Num","Cvg 2 Auth Num","Secondary CVG Address 1","Secondary CVG City","Secondary CVG State","Secondary CVG ZIP","Secondary Cvg Sub Phone","Tertiary Plan","Tertiary Subsc ID","Tertiary CVG Sub Name","Tertiary Cvg Sub Sex","Tertiary Cvg Sub DOB","Tertiary Cvg Mem Rel to Sub","Tertiary Cvg Sub Address","Tertiary Cvg Sub City","Tertiary Cvg Sub State","Tertiary CVG Group Num","Cvg 3 Auth Num","Tertiary CVG Address 1","Tertiary CVG City","Tertiary CVG State","Tertiary CVG ZIP","Tertiary Cvg Sub Phone","Quaternary Payor","Quaternary Subsc ID","Quat Cvg Subscr Nm","Quat Cvg Subscr Sex","Quat Cvg Subscr DOB","Quat Cvg Subscr Rel to Pt","Quat Cvg Subscr Addr","Quat Cvg Subscr City","Quat Cvg Subscr State","Quat Cvg Subscr ZIP Code","Quat Cvg Subscr Phone Num","Quat Cvg Grp Num","Cvg 4 Auth Num","Quat Cvg Addr Ln 1","Quat Cvg City","Quat Cvg State","Quat Cvg ZIP Code","Quat Cvg Phone Num""
SET "oldformat=EncProv|Hospital_Patient_Account_Number|Medical_Record_Number|Surgery_Date|Patient_Last_Name|Patient_First_Name|Patient_Middle_Initial|Patient_Social_Security_Number|Patient_Date_Of_Birth|Patient_Address|Patient_Address_Line_2|Patient_City|Patient_State|Patient_Zip_Code|Patient_Country|Patient_Phone_Number|Patient_Work_Phone_Number|Patient_Work_Phone_Extension|Patient_Gender|Patient_Marital_Status_Code|Patient_Type_Code|Patient_Type_Description|Patient_Admission_Date|Patient_Discharge_Date|Patient_Employer_Name|Patient_Empoyer_Address|Patient_Employer_City|Patient_Employer_State|Patient_Employer_Zip|Patient_Employer_Country|Guarantor_Patient_Relationship_To_Gurantor_Code|Guarantor_Patient_Relationship_To_Guarantor_Description|Guarantor_Last_Name|Guarantor_First_Name|Guarantor_Middle_Intitial|Guarantor_Address|Guarantor_Address_Line_2|Guarantor_City|Guarantor_State|Guarantor_Zip_Code|Guarantor_Country|Guarantor_Social_Security_Number|Guarantor_Phone_Number|Guarantor_Work_Phone_Number|Guarantor_Work_Phone_Extension|Guarantor_Gender|Guarantor_Date_Of_Birth|Guarantor_Employer_Name|Guarantor_Empoyer_Address|Guarantor_Employer_City|Guarantor_Employer_State|Guarantor_Employer_Zip|Guarantor_Employer_Country|Primary_Hospital_Carrier_Code|Primary_Carrier_Name|Primary_Carrier_Mnemonic|Primary_Carrier_Address|Primary_Carrier_Address_Line_2|Primary_Carrier_City|Primary_Carrier_State|Primary_Carrier_Zip_Code|Primary_Carrier_Policy_Number|Primary_Carrier_Group_Number|Primary_Carrier_Patient_Relationship_To_Subscriber_Code|Primary_Carrier_Patient_Relationship_To_Subscriber_Desc|Primary_Carrier_Policy_Holder_Last_Name|Primary_Carrier_Policy_Holder_First_Name|Primary_Carrier_Policy_Holder_Middle_Initial|Primary_Carrier_Policy_Holder_Address|Primary_Carrier_Policy_Holder_Address_Line_2|Primary_Carrier_Policy_Holder_City|Primary_Carrier_Policy_Holder_State|Primary_Carrier_Policy_Holder_Zip_Code|Primary_Carrier_Policy_Holder_Country|Primary_Carrier_Policy_Holder_Social_Security_Number|Primary_Carrier_Policy_Holder_Phone_Number|Primary_Carrier_Policy_Holder_Work_Phone_Number|Primary_Carrier_Policy_Holder_Gender|Primary_Carrier_Policy_Holder_Date_Of_Birth|Primary_Carrier_Policy_Holder_Employer_Name|Primary_Carrier_Policy_Holder_Empoyer_Address|Primary_Carrier_Policy_Holder_Employer_City|Primary_Carrier_Policy_Holder_Employer_State|Primary_Carrier_Policy_Holder_Employer_Zip|Primary_Carrier_Policy_Holder_Employer_Country|Secondary_Hospital_Carrier_Code|Secondary_Carrier_Name|Secondary_Carrier_Mnemonic|Secondary_Carrier_Address|Secondary_Carrier_Address_Line_2|Secondary_Carrier_City|Secondary_Carrier_State|Secondary_Carrier_Zip_Code|Secondary_Carrier_Policy_Number|Secondary_Carrier_Group_Number|Secondary_Carrier_Patient_Relationship_To_Subscriber_Code|Secondary_Carrier_Patient_Relationship_To_Subscriber_Desc|Secondary_Carrier_Policy_Holder_Last_Name|Secondary_Carrier_Policy_Holder_First_Name|Secondary_Carrier_Policy_Holder_Middle_Initial|Secondary_Carrier_Policy_Holder_Address|Secondary_Carrier_Policy_Holder_Address_Line_2|Secondary_Carrier_Policy_Holder_City|Secondary_Carrier_Policy_Holder_State|Secondary_Carrier_Policy_Holder_Zip_Code|Secondary_Carrier_Policy_Holder_Country|Secondary_Carrier_Policy_Holder_Social_Security_Number|Secondary_Carrier_Policy_Holder_Phone_Number|Secondary_Carrier_Policy_Holder_Work_Phone_Number|Secondary_Carrier_Policy_Holder_Gender|Secondary_Carrier_Policy_Holder_Date_Of_Birth|Secondary_Carrier_Policy_Holder_Employer_Name|Secondary_Carrier_Policy_Holder_Empoyer_Address|Secondary_Carrier_Policy_Holder_Employer_City|Sedondary_Carrier_Policy_Holder_Employer_State|Secondary_Carrier_Policy_Holder_Employer_Zip|Secondary_Carrier_Policy_Holder_Employer_Country|Tertiary_Hospital_Carrier_Code|Tertiary_Carrier_Name|Tertiary_Carrier_Mnemonic|Tertiary_Carrier_Address|Tertiary_Carrier_Address_Line_2|Tertiary_Carrier_City|Tertiary_Carrier_State|Tertiary_Carrier_Zip_Code|Tertiary_Carrier_Policy_Number|Tertiary_Carrier_Group_Number|Tertiary_Carrier_Patient_Relationship_To_Subscriber_Code|Tertiary_Carrier_Patient_Relationship_To_Subscriber_Desc|Tertiary_Carrier_Policy_Holder_Last_Name|Tertiary_Carrier_Policy_Holder_First_Name|Tertiary_Carrier_Policy_Holder_Middle_Initial|Tertiary_Carrier_Policy_Holder_Address|Tertiary_Carrier_Policy_Holder_Address_Line_2|Tertiary_Carrier_Policy_Holder_City|Tertiary_Carrier_Policy_Holder_State|Tertiary_Carrier_Policy_Holder_Zip_Code|Tertiary_Carrier_Policy_Holder_Country|Tertiary_Carrier_Policy_Holder_Social_Security_Number|Tertiary_Carrier_Policy_Holder_Phone_Number|Tertiary_Carrier_Policy_Holder_Work_Phone_Number|Tertiary_Carrier_Policy_Holder_Gender|Tertiary_Carrier_Policy_Holder_Date_Of_Birth|Tertiary_Carrier_Policy_Holder_Employer_Name|Tertiary_Carrier_Policy_Holder_Empoyer_Address|Tertiary_Carrier_Policy_Holder_Employer_City|Tertiary_Carrier_Policy_Holder_Employer_State|Tertiary_Carrier_Policy_Holder_Employer_Zip|Tertiary_Carrier_Policy_Holder_Employer_Country|Rendering_Performing_Doctor_Last_Name|Rendering_Performing_Doctor_First_Name|Rendering_Performing_Doctor_Middle_Initial|Rendering_Performing_Doctor_NPI_Number"

SET newcount=0
FOR %%e IN (%newformat%) DO SET /a newcount+=1&SET "fieldn[!newcount!]=%%~e"
SET oldcount=0
FOR %%e IN ("%oldformat:|=","%") DO SET /a oldcount+=1&SET "fieldo[!oldcount!]=%%~e"

:: Create mapping array; map[oldfieldnumber]=newfieldnumber
FOR /l %%e IN (1,1,%oldcount%) DO SET /a map[%%e]=0

SET "newfield="
FOR %%m IN (
 "DOB","Patient_Date_Of_Birth"
 "Hosp Acct","Hospital_Patient_Account_Number"
) DO (
 IF DEFINED newfield (
  FOR /L %%o IN (1,1,%oldcount%) DO IF "!fieldo[%%o]!"==%%m (
   FOR /l %%y IN (1,1,%newcount%) DO IF "!fieldn[%%y]!"=="!newfield!" SET /a map[%%o]=%%y
   SET "newfield="
  )
 ) ELSE SET "newfield=%%~m"
)

FOR /L %%e IN (1,1,%oldcount%) DO IF !map[%%e]!==0 ECHO !fieldo[%%e]! no source field

SET "sourcedir=."
SET "filename1=%sourcedir%\q77448153.txt"
SET "field[0]=?"
FOR /f "usebackqdelims=" %%y IN ("%filename1%") DO (
 SET /a index=0
 FOR %%e IN (%%y) DO SET /a index+=1&SET "field[!index!]=%%~e"
 SET "outline="
 FOR /L %%e IN (1,1,%oldcount%) DO FOR %%o IN (!map[%%e]!) do SET "outline=!outline!|!field[%%o]!"
 ECHO !outline:~1!
)

GOTO :EOF

没有一些样本数据(必要时进行混淆),很难测试。

我使用了一个名为

q77448153.txt
的文件,其中包含一些虚拟数据用于测试。

第一步是建立旧字段名

fieldo
和新字段名
fieldn

的数组

然后处理映射 - 这是在 OP 的法庭上 - 我只是选择了两个相当明显的字段。只需跟随弹跳球到达剩余区域即可。 map[oldfieldnumber] 包含新字段编号或零(表示未定义字段编号)。

报告任何未定义的映射

然后读取数据文件,为每个数据字段填写field[newfieldnumber]并构造输出行。

© www.soinside.com 2019 - 2024. All rights reserved.