如何解决有没有比使用查询更有效的方法来解析Access中的固定txt文件?
我修复了一些带有多种规范格式的文本文件。我需要根据在文件中具有设置位置的字符来解析txt文件。该字符在文件中的位置可以不同。
我已经针对每个不同的规范(其中的95个)编写了查询,并使用mid()函数和WHERE()函数将开始位置和长度硬编码到查询中,以从列表中过滤[记录标识符]规范。如您所见,下面的WHERE()函数中的2个规范在txt文件中具有不同的位置。
\\\
SELECT Mid([AllData],1,5) AS PlanNumber,Mid([AllData],6,4) AS Spaces1,10,3) AS Filler1,13,11) AS SSN,24,1) AS AccountIdentifier,25,5) AS Filler2,30,2) AS RecordIdentifier,32,1) AS FieldType,33,4) AS Filler3,37,8) AS HireDate,45,8) AS ParticipationDate,53,8) AS VestinDate,61,8) AS DateOfBirth,77,1) AS Spaces2,78,1) AS Reserved1,79,1) AS Reserved2,80,1) AS Spaces3
FROM TBL_Company1
WHERE (((Mid([AllData],2))="02") AND ((Mid([AllData],1))="D"));
\\\
Or
\\\
SELECT Mid([AllData],7) AS RecordIdentifier,22) AS StreetAddressForBank,54,20) AS CityForBank,74,2) AS StateForBank,76,5) AS ZipCodeForBank
FROM TBL_Company1
WHERE (((Mid([AllData],7))="49EFTAD"));
\\\
有没有一种方法可以解析此代码而不必将每个位置和长度都硬编码到代码中?
我当时正在考虑使用一个包含所有规范的表,并具有一个导入功能来查看规范表,并相应地将数据解析为新表或其他内容。
我所做的不是很可扩展,如果格式稍有变化,我将不得不返回到每个查询进行更改。
非常感谢您的帮助
解决方法
我认为在您的情况下,我希望能够按照您的建议动态生成SQL语句。
我会有一张类似的桌子
Format#,Position,OutColName,FromPos,Length,WhereValue
1,1,"PlanNumber",5,2,"Spaces1",6,4,...
1,n,30,"02"
1,n+1,32,1"D"
,然后再用一些VBA对其进行处理,并生成并执行SQL字符串。 SELECT子句条目将通过在OutColName字段中具有一个值以及WHERE子句条目通过WhereValue列中的值来识别。
当然,从某种意义上说,这只是更“有效”,因为编写新格式或修复/修改现有格式要容易一些。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。