我正在尝试将.csv文件加载到listview中:
ofDialog.Filter = @"CSV Files|*.csv";
ofDialog.Title = @"Select your backlink file...";
ofDialog.FileName = "backlinks.csv";
// is cancel pressed?
if (ofDialog.ShowDialog() == DialogResult.Cancel)
return;
try
{
string filename = ofDialog.FileName;
var lines = File.ReadAllLines(filename);
foreach (string line in lines)
{
var parts = line.Split(' ');
ListViewItem lvi = new ListViewItem(parts[0]);
lvi.SubItems.Add(parts[1]);
listViewMain.Items.Add(lvi);
}
// update count
Helpers.returnMessage(File.ReadAllLines(ofDialog.FileName).Count() + " rows imported.");
}
catch (Exception ex)
{
Helpers.returnMessage(ex.Message);
}
csv内容如下:
URL Rating Domain Rating IP From Referring Page URL Referring Page Title Internal Links Count External Links Count Link URL TextPre Link Anchor TextPost Size Type NoFollow Site-wide Image Encoding Alt First Seen Previous Visited Last Check Original 24 89 91.198.174.192 http://en.wikipedia.org/wiki/Humbug_(sweet) "Humbug (sweet) - Wikipedia, the free encyclopedia" 118 16 http://www.bestbritishsweets.co.uk/user/products/large/everton.jpg http://www.bestbritishsweets.co.uk/user/products/large/everton.jpg 12163 href True False False utf8 2013-09-08T15:14:50Z 2015-03-11T01:48:40Z 2015-03-11T01:48:40Z True
没有devels“,”就像普通的.csv文件一样,并且在某些字段之间有不同的空格,我坚持分割每个部分并添加到listview的最佳方法,我有一个心理块lol < / p>
任何帮助将不胜感激:)
欢呼人们格雷厄姆
答案 0 :(得分:0)
要打开CSV文件,我首先会检查它不是制表符分隔文件,您可以使用\t
作为分隔符,以与您类似的方式读取文件。
如果失败了,您可以使用(非常长且复杂的)正则表达式字符串将不同的“列”作为不同的部分进行匹配。正则表达式字符串看起来像:
\s+([0-9]*)\s+([0-9]*)\s+([0-9]*.[0-9]*.[0-9]*.[0-9]*)\s+([a-zA-Z:\/._\(\)]*)\s+(\"[a-zA-Z0-9 \-\(\),]*\")\s+([0-9]*)\s+([0-9]*)\s+([a-zA-Z:\/._\(\)]*)\s+([a-zA-Z:\/._\(\)]*)\s+([0-9]*)\s+([a-zA-Z]*)\s+(True|False)\s+(True|False)\s+(True|False)\s+([a-z0-9]*)\s+([0-9\-T:Z]*)\s+([0-9\-T:Z]*)\s+([0-9\-T:Z]*)\s+(True|False)
这会将每列作为不同的组返回,您可以访问以下详细信息:
var regex = new Regex(regexString);
foreach(var line in lines)
{
var match = regex.Match(line);
var urlRating = match.Groups[0].Value;
var domainRating = match.Groups[1].Value;
var ip = match.Groups[2].Value;
// ...
}
您可以在此处查看有关我创建的正则表达式字符串的更多信息(并可能为其他行简化/扩展):https://regex101.com/r/oN4tW3/1
有关C#正则表达式的更多信息,请查看此处:https://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regex(v=vs.110).aspx
编辑:我会避免使用正则表达式方法,如果它是标签分隔,因为它更复杂和脆弱