【发布时间】:2020-04-12 09:29:54
【问题描述】:
我是一名绿色 C# 程序员,我正在尝试向应用程序添加异常处理,但不确定实现我正在寻找的结果的正确方法。我正在解析 CSV 并获取始终在同一个位置的值。如果一个空白或格式不正确的文件通过它会导致应用程序崩溃,我想防止这种情况发生。如果发生异常,我不想存储文件中的值,而是想在字符串变量中存储一个空格字符。这是我的代码:
using (StreamReader inputGetData = new StreamReader(filename.FullName))
{
//STORE DATA STRIPPED FROM MDT FILE
lotID = inputGetData.ReadLine().Split(',')[2];
exatronFile = inputGetData.ReadLine().Split(',')[2];
rofinFile = inputGetData.ReadLine().Split(',')[2];
lotQty = inputGetData.ReadLine().Split(',')[2];
serialize = inputGetData.ReadLine().Split(',')[2];
serialStart = inputGetData.ReadLine().Split(',')[2];
serialInc = inputGetData.ReadLine().Split(',')[2];
partNum = inputGetData.ReadLine().Split(',')[3];
inputGetData.ReadLine();
dieMNF = inputGetData.ReadLine().Split(',')[3];
assemblySub = inputGetData.ReadLine().Split(',')[3];
countryOrigin = inputGetData.ReadLine().Split(',')[3];
dateCode = inputGetData.ReadLine().Split(',')[3];
QMLcomp = inputGetData.ReadLine().Split(',')[3];
prefix = inputGetData.ReadLine().Split(',')[3];
serialNum = inputGetData.ReadLine().Split(',')[3];
suffix = inputGetData.ReadLine().Split(',')[3];
inputGetData.ReadLine();
packageCode = inputGetData.ReadLine().Split(',')[1];
所以理想情况下,我想尝试每一行,如果发生异常则捕获异常,将其抛出到更高的日志记录方法,然后将“”存储到变量中。如果我将最后一部分放入 finally 块中,即使没有正确发生异常,它也会始终运行?我怎样才能做到这一点?
【问题讨论】:
-
如果您执行空值和长度检查而不是链接表达式,则可以完全避免异常。如果您知道如何通过预先测试条件来避免异常,那么您应该这样做。
-
为什么不创建一个方法来读取一行,拆分它,检查是否有足够的项目,然后相应地返回?例外是针对特殊情况的,没有理由在这里一直重复同一段代码
-
这是解析 CSV 文件的随机提示:查看 CsvHelper 包。这不是必需的,但它可以让事情变得更容易。
-
感谢大家的及时回复! @SamiKuhmonen 这看起来是个完美的主意,我很感激!
-
CSV 格式比你想象的要复杂,
Splitdoes not parse CSV。有许多CSV parsers 可以正确处理它们。
标签: c# exception try-catch try-catch-finally