簡體   English   中英

如何在平面文件(CSV,TSV等)中發現文本限定符?

[英]How do I discover text qualifiers in a flat file (CSV, TSV etc)?

我們使用多種奇異的分隔符(| 、;等)來接收多種不同格式的文件-CSV,TSV或其他平面文件。 這些文件也可以使用文本限定符,格式又是一定的(每個域限定符與僅包含限定符限定符的限定符,使用不同的字符','等)。

我編寫了一種工具,該工具能夠使用頻率分析技術成功識別文件中的定界符,與這里提到的Python嗅探器類不同: 我應該如何檢測文本文件中使用了哪個定界符?

我現在正嘗試擴展該工具以支持文本限定文件。 此處的困難在於,頻率分析不足以識別文本限定符,因為許多形式的CSV只會將包含定界符的字段與文本限定符一起包裝,例如,一個具有10k行的文件在整體上可能僅出現2個文本限定符文件。

我當前的方法是掃描文件以查找定界符-文本限定符對(例如,“和”,),然后將它們與其他可能的對(例如,“和”,)進行比較,並選擇最常出現的對。

誰能提供更強大的替代方案? 該問題的一個關鍵約束是,我必須支持可以創建的許多不同風味的CSV文件。 我的目標是在沒有用戶干預的情況下支持盡可能多的案例。

您可以嘗試使用正則表達式進行某些模式匹配。 由於您已經知道定界符,因此可以嘗試使用諸如"'類的常見限定符列表。如果這些限定符失敗,則可以嘗試對具有不正確的列對齊方式的行進行解析,以匹配與該模式匹配的輸入並產生預期的列對齊方式。

var delimiter = ",";
var qualifiers = new[] { "\"", "'" };
var input = @"""Hello, World"", Hello, World";
var pattern = @"(?<={1}).*{0}.*(?={1})";

foreach(var p in qualifiers.Select(q => string.Format(pattern, delimiter, q)))
{
    Regex.Match(input, p);
}

您可以使用正則表達式提取特殊字符及其索引嗎? 在索引上,您可以獲得序列。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM