我有一个如下所示的CSV电子表格
我正在尝试仅从ColumnA中读取数据。阅读有关cvsHelper的信息,但是我不知道如何使用下面的代码来适应它。目前,代码请阅读所有电子表格中的任何建议
C#代码
>>> "{0:+g}".format(2.00001)
'+2.00001'
>>> "{0:+g}".format(-2.00001)
'-2.00001'
>>> "{0:+g}".format(2)
'+2'
答案 0 :(得分:2)
您自己不用尝试解析CSV文件,而是使用CsvHelper之类的库。请注意,CSV文件中允许Abc,Def,"Ghi,jkl",mno
出现,即逗号可以在值内找到,而不仅仅是分隔值。编写解析器是困难的。
我已经written about CsvParser before,但是这是为您的文件结构量身定制的示例,我假设图像中给出的列名精确地 。从string csvData = System.IO.File.ReadAllText(filePath);
行开始替换了
IEnumerable<LineInMyCsvFile> allRecords = null;
using (var reader = File.OpenText(filePath))
{
var csvParser = new CsvParser(reader);
CsvReader r = new CsvReader(csvParser);
allRecords = r.GetRecords<LineInMyCsvFile>().ToArray();
}
上面的代码读取CSV文件并将每行的内容放入allRecords
中,然后您可以遍历它们并对它们执行任何操作:
foreach(var record in allRecords)
{
// Imagine you only care about the value in ColunmA:
listmobilenumber.Add(record.ColunmA);
}
这是用于映射CSV文件中的列的结构,以便CsvHelper
可以对其进行处理:
// I'm named badly, give me a sensible name that makes sense in context! :-)
struct LineInMyCsvFile
{
public string ColunmA { get; set; }
public string ColunmB { get; set; }
public string ColunmC { get; set; }
public string ColunmD { get; set; }
}
答案 1 :(得分:1)
在@Rob的帮助下,我只是添加我的最终代码以帮助用户将来遇到相同的问题
--security-opt apparmor=unconfined
CSV类设计
if (attachmentcsv != null)
{
List<string> listmobilenumber = new List<string>();
string filePath = string.Empty;
string path = Server.MapPath(@"~/Uploads/");
filePath = Path.Combine(path, attachmentcsv.FileName);
IEnumerable<CsvFileModel> allRecords = null;
StreamReader reader = new StreamReader(filePath);
using (CsvReader csvReader = new CsvReader(reader))
{
csvReader.Configuration.HeaderValidated = null;
csvReader.Configuration.MissingFieldFound = null;
allRecords = csvReader.GetRecords<CsvFileModel>().ToArray();
}
foreach (var record in allRecords)
{
// Passed Mobile number into a list
listmobilenumber.Add(record.MobileNumber);
}
}
答案 2 :(得分:0)
您可以在“添加”中再次分割行:
if (!string.IsNullOrEmpty(row))
{
listmobilenumber.Add(row.Split(';').First());
}
答案 3 :(得分:-1)
首先找到“ ColumnA”编号
u可以使用类似这样的东西:
if (!string.IsNullOrEmpty(row))
{
string[] tokens = row.Split(';');
if(tokens.Length>=number)
listmobilenumber.Add(tokens[number-1]);
}