我正在研究一个读取2个csv文件的项目:
var myFullCsv = ReadFile(myFullCsvFilePath);
var masterCsv = ReadFile(csvFilePath);
Run Code Online (Sandbox Code Playgroud)
然后创建一个新的var,其中包含myFullCsv中存在的额外行,但不包含主Csv.代码很棒,因为它简单:
var extraFilesCsv = myFullCsv.Except(masterCsv);
Run Code Online (Sandbox Code Playgroud)
读入的csv文件包含如下数据:
c01.jpg,95182,24f77a1e,\Folder1\FolderA\,
c02.jpg,131088,c17b1f13,\Folder1\FolderA\,
c03.jpg,129485,ddc964ec,\Folder1\FolderA\,
c04.jpg,100999,930ee633,\Folder1\FolderA\,
c05.jpg,101638,b89f1f28,\Folder1\FolderA\,
Run Code Online (Sandbox Code Playgroud)
但是,我刚刚发现每个文件中某些字符不匹配的情况.例如(JPG in caps):
c01.JPG,95182,24f77a1e,\Folder1\FolderA\,
Run Code Online (Sandbox Code Playgroud)
如果数据是这样的,那么它不包含在extraFilesCsv中,但我需要它.任何人都可以告诉我如何使这段代码对文本的情况不敏感?
编辑:对不起,我忘了ReadFile不是标准命令.这是代码:
public static IEnumerable<string> ReadFile(string path)
{
string line;
using (var reader = File.OpenText(path))
while ((line = reader.ReadLine()) != null)
yield return line;
}
Run Code Online (Sandbox Code Playgroud)
我假设你已经读过两个csv文件,并且有一个代表每个文件的字符串集合.
您可以EqualityComparer在调用中指定特定的Except(),指示两个对象集合之间要进行的比较类型.
您可以创建自己的比较器,或者假设两个集合都是字符串,请尝试指定忽略大小写的现有集合:
var extraFilesCsv
= myFullCsv.Except(masterCsv, StringComparer.CurrentCultureIgnoreCase);
Run Code Online (Sandbox Code Playgroud)
默认情况下,如果您未指定比较器,则使用它EqualityComparer<TElement>.Default,它根据您要比较的类类型而有所不同.
对于字符串,它首先a==b默认进行直接比较,这是区分大小写的.( 该类的确切实现string 有点复杂,但可能不必在此处发布.)
| 归档时间: |
|
| 查看次数: |
469 次 |
| 最近记录: |