C# 方法无法从.csv读取所有行
我们有一个应用程序,用于管理对VOIP系统的更改。它使用CSV上传,该CSV由控制手机的CISCO系统的自定义导出构建。我认为,在.csv文件中有一个错误的行,其中有一个“-”字符,它失败了,即删除该字符使文件能够一直处理。读取文件的方法由StreamReader提供,StaticConfig对象是存储每行记录的实体。这是读取.csv的行的方法:C# 方法无法从.csv读取所有行,c#,csv,C#,Csv,我们有一个应用程序,用于管理对VOIP系统的更改。它使用CSV上传,该CSV由控制手机的CISCO系统的自定义导出构建。我认为,在.csv文件中有一个错误的行,其中有一个“-”字符,它失败了,即删除该字符使文件能够一直处理。读取文件的方法由StreamReader提供,StaticConfig对象是存储每行记录的实体。这是读取.csv的行的方法: while ((LineBuffer = sr.ReadLine()) != null) {
while ((LineBuffer = sr.ReadLine()) != null)
{
// loop through all lines found in file
string[] tmpString = LineBuffer.Split(Convert.ToChar(","));
if (tmpString[0] != "")
{
StaticConfig staticEntry = new StaticConfig();
int extension;
if (Int32.TryParse(tmpString[0].Trim(), out extension))
{
staticEntry.DirectoryNumber = extension;
staticEntry.Building = tmpString[9].Trim();
staticEntry.LongDistance = (tmpString[7].Trim() == "1");
staticEntry.ClassRestricted = (tmpString[6].Trim() == "1");
staticEntry.VoiceMail = (tmpString[8].Trim() == "1");
staticEntry.Location = tmpString[5].Trim();
staticEntry.UserFName = tmpString[1].Trim();
staticEntry.UserLName = tmpString[2].Trim();
staticEntry.UserID = tmpString[3].Trim();
staticEntry.EmployeeNumber = tmpString[4].Trim();
staticEntry.UploadDate = uploadTime;
//Get the locationID
var LocationID = (from l in voipDB.Locations
where l.LocationName == staticEntry.Building
select l.LocationID).FirstOrDefault();
if (LocationID != Guid.Empty)
staticEntry.LocationID = LocationID;
else
{
Location newLocation = new Location();
newLocation.LocationID = Guid.NewGuid();
newLocation.LocationName = staticEntry.Building;
newLocation.IsLocked = false;
newLocation.IsSubmitted = false;
voipDB.AddToLocations(newLocation);
staticEntry.LocationID = newLocation.LocationID;
voipDB.SaveChanges();
}
voipDB.StaticConfigs.AddObject(staticEntry);
processed++;
}
}
}
但对我来说,这在“-”字符上失败是毫无意义的,所以我觉得我错过了什么。查看.Split和Convert.ToChar的MSDN报告,我没有看到任何失败的情况。谁能告诉我为什么会失败,或者在哪里?关于这方面有什么有用的信息来源吗?非常感谢 您能否提供一个失败的最小CSV示例?您可能有一个包含逗号的带引号的值,这段代码无法正确处理,因为它只是在逗号上拆分,而不考虑它们在每行中出现的位置。有关更健壮的CSV解析,请参阅。您说此代码失败,但没有明确解释它是如何失败的。你收到错误信息了吗?如果是,此消息是什么?你有没有试着/抓住这些线?这就是问题所在。它没有给我任何错误信息。只是读的行比它应该读的少。在某些情况下,成百上千的人没有明确的迹象表明它在任何一行失败的原因。删除这一行后,它正确地读取了.csv的所有行:(ext),emptage,-RM D22,,,D22,1,0,0,(school)我也可以给你一个示例csv,但我实际上不知道如何将它附加到这里?你需要每一行至少由10个子字符串组成(你使用索引9)你确定你的行都由10个子字符串组成吗?