我有一个没有文本限定符的大型管道描述文本文件,看起来像吐出这个文件意外地每隔几百行在最后一列中吐出错误的“LF”标记。 最后一列是一个描述性列,它不是应该以任何方式进行文本限定。 文件看起来类似于:
id|data|data|data|data|Description[LF]
id|data|data|data|data|Description[LF]
id|data|data|data|data|Description[LF]
id|data|data|data|data|Descr[LF]
iption[LF]
id|data|data|data|data|Description[LF]
Id|data|data|data|data|Description[LF]
id|data|data|data|data|Descripti[LF]
on[LF]
id|data|data|data|data|Description[LF]
id|data|data|data|data|Description[LF]
id|data|data|data|data|Description[LF]
id|data|data|data|data|Description[LF]
id|data|data|data|data|D[LF]
escription[LF]
我对SSIS和SQL一般都很陌生,有没有人对如何解决这个问题有任何建议?
答案 0 :(得分:1)
我确实找到了一种在Notepad ++中修复它的方法,因为我不知道C#而且我不太了解SSIS ......
ID为8位长,然后是7个空格。这个文件绝对是唯一的。
在notepad ++中我用(Find Extended)搜索并替换“\ n”(LF)什么都没有
然后我将这个表达式用于find:
for (var i = 0; i < brand_ids.length; i++)
{
var query = new Parse.Query(product);
var brand = new Brand();
brand.id = brand_ids[i];
query.equalTo('brand', brand);
query.include('brand');
query.include('shop'); //TODO: where shop is one of [ids]
queries.push(query);
};
查找包含7个尾随空格的所有8位数字,并且对于替换,使用此:
(\d\d\d\d\d\d\d\d[[:blank:]][[:blank:]][[:blank:]][[:blank:]][[:blank:]][[:blank:]][[:blank:]])
将[CR] [LF]放在这8位数字的前面。
看,它有效! 但无论哪种方式..我的老板联系了客户,并要求更好的文件。现在我得到了赞誉,我们获得了适当的数据。感谢您的建议!
答案 1 :(得分:0)
如果我不得不猜测,我会说这是因为文件的创建方式而发生的......你可能正好拥有的数据恰好包含某些被错误地解释为换行符的特殊字符。
选中此site以查看问题行中的数据是否与这些编码相匹配。如果是这种情况,那么最终您有两种选择:
1)在处理之前,创建一些复杂而复杂的ETL process来检测和更正文件数据。这是不可取的,因为创建和维护将是一个巨大的痛苦。
2)尝试更改生成此文件的方式。大多数文本导出向导都允许您在文本项周围放置引号(“),以便导入过程可以快速检测到某些内容作为文本块而不是要解释的一系列编码字符。