如何在 C# 中存储之前验证 .csv 文件?

2023-12-12

我有一些 .csv 文件,在存储到数据库之前我正在解析这些文件。

我想让应用程序更加健壮,并在保存到数据库之前对 .csv 文件执行验证。

所以我问你们是否有一些好的链接、代码示例、模式或关于如何做到这一点的建议?

我将在下面粘贴我的 .csv 文件的示例。 .csv 文件中的不同数据字段由制表符分隔。每个新行数据都占一个新行。

我一直在思考我应该验证的事情,并提出了下面的列表(我非常愿意接受其他建议,以防您有任何您认为应该添加到列表中的内容?)

Correct file encoding.
That file is not empty.
Correct number of lines/columns.
correct number/text/date formats.
correct number ranges.

这就是我的 .csv 文件的样子(包含两行的文件,一行上的数据由制表符分隔)。

4523424 A123456 GT-P1000    mobile phone    Samsung XSD1234 135354191325234
345353  A134211 A8181   mobile phome    HTC S4112-ad3   111911911932343

上面的字符串表示如下:

"4523424\tA123456\tGT-P1000\tmobile phone\tSamsung\tXSD1234\t135354191325234\r

\n345353\tA134211\tA8181\tmobile phome\tHTC\tS4112-ad3\t111911911932343\r\n"

那么,您是否有关于如何在 C# 中执行此操作的良好设计、链接、模式、代码示例等?


我确实喜欢这样:

创建一个类来保存具有预期类型的​​每个解析行

 internal sealed class Record {
     public int Field1 { get; set; }
     public DateTime Field2 { get; set; }
     public decimal? PossibleEmptyField3 { get; set; }
     ...
 }

创建一个将行解析到记录中的方法

public Record ParseRecord(string[] fields) {
    if (fields.Length < SomeLineLength)
        throw new MalformadLineException(...)

    var record = new Record();

    record.Field1 = int.Parse(fields[0], NumberFormat.None, CultureInvoice.InvariantCulture);
    record.Field2 = DateTime.ParseExact(fields[1], "yyyyMMdd", CultureInvoice.InvariantCulture);
    if (fields[2] != "")
        record.PossibleEmptyField3 = decimal.Parse(fields[2]...)

    return record;
}

创建一个解析整个文件的方法

public List<Record> ParseStream(Stream stream) {
    var tfp = new TextFileParser(stream);

    ...
    try {
        while (!tfp.EndOfData) {
            records.Add(ParseRecord(tfp.ReadFields());
        }
    }
    catch (FormatException ex) {
        ... // show error
    }
    catch (MalformadLineException ex) {
        ... // show error
    }

    return records;
}

然后我创建了许多验证字段的方法

public void ValidateField2(IEnumerable<Record> records) {
    foreach (var invalidRecord in records.Where(x => x.Field2 < DateTime.Today))
       ... // show error
}

我尝试过各种工具,但由于模式很简单,所以它们没有多大帮助。 (您应该使用工具将行拆分为字段)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 C# 中存储之前验证 .csv 文件? 的相关文章

  • 嵌入式系统中的malloc [重复]

    这个问题在这里已经有答案了 我正在使用嵌入式系统 该应用程序在 AT91SAMxxxx 和 cortex m3 lpc17xxx 上运行 我正在研究动态内存分配 因为它会极大地改变应用程序的外观 并给我更多的力量 我认为我唯一真正的路线是为
  • fgets() 和 Ctrl+D,三次才能结束?

    I don t understand why I need press Ctrl D for three times to send the EOF In addition if I press Enter then it only too
  • 为什么 POSIX 允许在只读模式下超出现有文件结尾 (fseek) 进行搜索

    为什么寻找文件结尾很有用 为什么 POSIX 让我们像示例中那样在以只读方式打开的文件中进行查找 c http en cppreference com w c io fseek http en cppreference com w c io
  • 使用 C# 在 WinRT 中获取可用磁盘空间

    DllImport kernel32 dll SetLastError true static extern bool GetDiskFreeSpaceEx string lpDirectoryName out ulong lpFreeBy
  • c 中的错误:声明隐藏了全局范围内的变量

    当我尝试编译以下代码时 我收到此错误消息 错误 声明隐藏了全局范围内的变量 无效迭代器 节点 根 我不明白我到底在哪里隐藏或隐藏了之前声明的全局变量 我怎样才能解决这个问题 typedef node typedef struct node
  • 当 Cortex-M3 出现硬故障时如何保留堆栈跟踪?

    使用以下设置 基于 Cortex M3 的 C gcc arm 交叉工具链 https launchpad net gcc arm embedded 使用 C 和 C FreeRtos 7 5 3 日食月神 Segger Jlink 与 J
  • 按字典顺序对整数数组进行排序 C++

    我想按字典顺序对一个大整数数组 例如 100 万个元素 进行排序 Example input 100 21 22 99 1 927 sorted 1 100 21 22 927 99 我用最简单的方法做到了 将所有数字转换为字符串 非常昂贵
  • A* 之间的差异 pA = 新 A;和 A* pA = 新 A();

    在 C 中 以下两个动态对象创建之间的确切区别是什么 A pA new A A pA new A 我做了一些测试 但似乎在这两种情况下 都调用了默认构造函数 并且仅调用了它 我正在寻找性能方面的任何差异 Thanks If A是 POD 类
  • 使用向量的 merge_sort 在少于 9 个输入的情况下效果很好

    不知何故 我使用向量实现了合并排序 问题是 它可以在少于 9 个输入的情况下正常工作 但在有 9 个或更多输入的情况下 它会执行一些我不明白的操作 如下所示 Input 5 4 3 2 1 6 5 4 3 2 1 9 8 7 6 5 4 3
  • Windows 窗体不会在调试模式下显示

    我最近升级到 VS 2012 我有一组在 VS 2010 中编码的 UI 测试 我试图在 VS 2012 中启动它们 我有一个 Windows 窗体 在开始时显示使用 AssemblyInitialize 属性运行测试 我使用此表单允许用户
  • *.tlb 文件在运行时使用过吗?

    我正在开发一个通过 COM 互操作公开一些 NET API 的产品 作为构建的一部分 我们为所有此类程序集生成 tlb 文件 并将它们作为单独 SDK 包的一部分提供 我们的客户可以在我们的产品之上安装 SDK 并创建使用我们的 COM A
  • 初始化变量的不同方式

    在 C 中初始化变量有多种方法 int z 3 与 int 相同z 3 Is int z z 3 same as int z z 3 您可以使用 int z z 3 Or just int z 3 Or int z 3 Or int z i
  • Windows 10 中 Qt 桌面应用程序的缩放不当

    我正在为 Windows 10 编写一个简单的 Qt Widgets Gui 应用程序 我使用的是 Qt 5 6 0 beta 版本 我遇到的问题是它根本无法缩放到我的 Surfacebook 的屏幕上 这有点难以判断 因为 SO 缩放了图
  • 像“1$”这样的位置参数如何与 printf() 一起使用?

    By man I find printf d width num and printf 2 1 d width num 是等价的 但在我看来 第二种风格应该与以下相同 printf d num width 然而通过测试似乎man是对的 为什
  • C 中的位移位

    如果与有符号整数对应的位模式右移 则 1 vacant bit will be filled by the sign bit 2 vacant bit will be filled by 0 3 The outcome is impleme
  • 什么是 C 语言的高效工作流程? - Makefile + bash脚本

    我正在开发我的第一个项目 该项目将跨越多个 C 文件 对于我的前几个练习程序 我只是在中编写了我的代码main c并使用编译gcc main c o main 当我学习时 这对我有用 现在 我正在独自开展一个更大的项目 我想继续自己进行编译
  • 如何在.NET Core上直接调用F#编译器?

    UPD 我想直接从 NET Core SDK 调用 F 编译器 即 fsc 我了解 dotnet build co 但当我只需要编译一个简单的问题时 即 fsc file fs 就足够的情况下 我不想涉及它们 我尝试在 NET Core S
  • ListDictionary 类是否有通用替代方案?

    我正在查看一些示例代码 其中他们使用了ListDictionary对象来存储少量数据 大约 5 10 个对象左右 但这个数字可能会随着时间的推移而改变 我使用此类的唯一问题是 与我所做的其他所有事情不同 它不是通用的 这意味着 如果我在这里
  • 方法参数内的变量赋值

    我刚刚发现 通过发现错误 你可以这样做 string s 3 int i int TryParse s hello out i returns false 使用赋值的返回值是否合法 Obviously i is but is this th
  • 如何连接字符串和常量字符?

    我需要将 hello world 放入c中 我怎样才能做到这一点 string a hello const char b world const char C string a hello const char b world a b co

随机推荐

  • 在 Android 应用程序中动态添加单选按钮

    我需要动态添加单选按钮 单选按钮可以是 3 4 5 或 6 它会水平添加 一行最多包含 3 个单选按钮 如果超过 3 个 那么它将位于单选按钮上方行的下方 如网格视图中所示 我的单选按钮代码如下 但它在一行中显示所有单选按钮 这意味着它隐藏
  • 使用 gradle 任务创建可执行 jar 后无法找到或加载主类

    我使用 gluon 插件创建了一个新的单视图项目 并且没有更改其文件中的任何内容 如果我使用 gradle 任务application gt run效果很好 但如果我使用任务build gt jar它在下面创建了罐子SingleViewPr
  • 使用 FPDF PHP 时出现奇怪的字符?

    我在使用 FPDF 库生成 pdf 文件时得到此输出 PDF 1 3 3 0 obj endobj 4 0 obj 流 x U n 0 endobj 5 0 obj endobj 2 0 obj gt XObject gt gt gt en
  • 如何读取cakephp视图文件中的cookie值

    在此我将 cookie 值写入控制器文件中 我想读取视图文件中的 cookie 值 而不是如何可能 您必须在控制器中读取它并设置该值以使其可用于视图 this gt set myValue this gt Cookie gt read co
  • Azure SQL 使用 PowerShell 和 ServicePrincipal 为 AD 用户授予访问权限

    我尝试为 Azure SQL Server 创建用户 我想使用 AzureAD 用户 这是代码 accessToken az account get access token resource https database windows
  • 我需要使用 VBA 将数据从 Excel 导入到 SQL Server

    我正在尝试将数据从我的 PC 上的另一个 Excel 工作簿导入到 SQL Server 我尝试使用这段代码 但它不起作用 Sub insertion Dim conn As ADODB Connection Dim rs As ADODB
  • 以二进制形式设置权限

    我在学校看到一个使用二进制字符串设置权限的系统 假设 101001 41 So 1可以是第1页的权限 2 可以是第2页的权限 4 可以是第3页的权限 8可以是第4页的权限 16可以是第5页的权限 32可以是第6页的权限 假设我得到了上面的二
  • 阿卡。安卓。 NoSuchMethodException:

    当我在 Android 上运行使用 Akka 的应用程序时 我收到以下异常 04 29 16 13 06 235 E AndroidRuntime 8968 java lang RuntimeException Unable to star
  • 仅从字符串中提取数字

    据说我有一个包含以下内容的字符串 hello 14 12 现在我只想提取数字 并在两个变量中有两个单独的值 如下所示 first num值应该是int 即first num 14 第二个变量应该存储冒号后面的数字 即 Second num
  • 如何在 Swift 中制作可设计的 UIImage

    我是初学者 我想制作一个 swift 文件 其中包含制作可设计 UIImage 的代码 因此我不会通过编码来编辑 UI 元素显示 只需在界面构建器中将此 swift 文件分配给 UI 类即可 我可以在 UIButton 中做类似的事情 例如
  • 每个key必须是一个数字字符串;得到未定义的量角器

    我正在尝试从 json 文件读取数据 但遇到了一些问题 如何将 json 文件中的项目获取到单个项目 我的 json 文件 UserName email protected Password tests123 我的方法 element by
  • 无法从 http 端点消费

    下面给出了我的路线 我正在尝试使用 HTTP 组件交换数据 URI 包含提交数据并获取响应应该获取数据 但它不起作用
  • 如何减去年份?

    我在 R 中有一个约会 例如 dt as Date 2010 03 17 我想从此日期减去 2 年 而不用担心闰年和此类问题 得到as Date 2008 03 17 我该怎么做呢 With lubridate library lubrid
  • 如何使用 Notepad++ Compare 作为 git bash/命令行中的 diff 工具?

    有什么方法可以更改 gitbash 中的默认 diff 工具吗 这篇文章似乎表明这是可能的 但他们没有提供命令行示例 关联 从命令行运行 NotePad 并使用比较插件显示比较结果 由于 Notepad 的官方 diff 插件似乎是uph0
  • Drools 6.4 KieScanner:如何在 Maven 中创建和添加带有规则的 Jar?

    我是 Drools 和 Maven 的初学者 我面临着使用 KieScanner 加载规则的问题 该项目的目标是能够在永久 KieSession 中动态加载规则 我想知道是否可以使用 KieFileSystem 管理规则 不确定是否可以在不
  • 如何解决Odoo中不存在列res_partner.

    例如 reonp 很好地添加到了模型中 但是当我尝试添加 gradjanin 时 Odoo 10 会引发错误 我试图重新启动服务器 py class komPartnerrReon models Model inherit res part
  • 使用带有像素后备的 rems

    我正在研究移动优先框架 该项目有广泛的需求 需要满足不同地点的大量浏览器和设备 我的主要目标地点之一是印度 那里的浏览器和设备使用趋势与英国或美 国有很大不同 印度浏览器使用情况http gs statcounter com all bro
  • 如果使用autowidth:true,如何删除免费的jqgrid自己的水平滚动条

    使用以下设置将免费 jqgrid 宽度设置为至少占据整个窗口宽度jqGrid 和自动宽度选项 它是如何工作的 answer autowidth true shrinkToFit false 使用以下答案中的样式使顶级工具栏图标变得更大 如果
  • Django 继承和永久链接

    我正在 django 中创建一个简单的 CMS 其中包含多个 模块 每个模块都是一个 django 应用程序 我设置了以下模型 class FooObject models Model id models SlugField primary
  • 如何在 C# 中存储之前验证 .csv 文件?

    我有一些 csv 文件 在存储到数据库之前我正在解析这些文件 我想让应用程序更加健壮 并在保存到数据库之前对 csv 文件执行验证 所以我问你们是否有一些好的链接 代码示例 模式或关于如何做到这一点的建议 我将在下面粘贴我的 csv 文件的