【问题标题】:VB.NET - CSV ImportVB.NET - CSV 导入
【发布时间】:2020-04-06 17:19:20
【问题描述】:

我有一个由可变数量的行和列组成的大型 CSV 文件。 每列对应一个十六进制值,需要转换为不同的格式。 我完成的第一步是将 CSV 导入到数组数组中。

导入非常快速且稳定,但我的问题是,管理和转换 hexValues 的最佳方法是什么?

最终输出将是转换后的值的 CSV。

用于 CSV 导入的代码如下:

Private Function CSVRead(iFile As String) As String()()
    Dim RC()() As String
    Dim Lines() As String = File.ReadAllLines(iFile)
    ReDim RC(Lines.Length - 1)
    For I As Integer = 0 To Lines.Length - 1
        RC(I) = Lines(I).Split(";"c)
    Next
    Return RC
End Function

【问题讨论】:

  • 您好!您能否发布更多上下文,例如 CSV 中可能包含哪些值的小示例?你能解释一下你想把十六进制值转换成什么吗?他们应该从hex to int 出发吗? Hex to decimal?
  • 十六进制数据基本上是“0xFFFFFF”格式的字符串。这些值可以转换为不同的格式,例如有符号或无符号整数,其中一些包含来自其他一些我需要提取单个位的 BCD 数据。所有转换信息都来自用户配置文件。

标签: vb.net csv


【解决方案1】:

备注:ReadAllLines 不会在大文件上获得良好的性能,因为它“打开一个文本文件,将文件的所有行读入一个字符串数组,然后关闭文件。” MS doc

你真的需要这样做吗?为什么不只迭代文件并逐行处理呢? ReadLines 会是更好的选择 C#: File.ReadLines() vs File.ReadAllLines() — and why should I care?

不要使用过时的字符串数组,而是使用List Of(String)。因此,您的函数可以返回 List Of(String)

导入 CSV 文件的代码示例很多,例如: How to: read from comma-delimited text files in Visual Basic。所以我想知道你是如何想出这个解决方案的,它可能工作得很好,但却是另一种重新发明轮子的方式。

我了解到您的意图是在进行一些转换后生成另一个 CSV 文件,因此最好的方法是简单地循环读取源文件,逐行,然后并行写入目标文件。这个过程可以更直接。

不幸的是,您省略了最重要的细节,因为您没有对这些十六进制值进行太多说明,也没有说明您当前如何将它们转换为应该转换的内容。所以我不确定你到底想要什么,但这里有一个想法:从基数 16 转换为 10

dim h as string = "FF"
Dim i As Integer = Convert.ToInt32(h, 16)
' returns 255
console.WriteLine(i)

值中数字的底数,必须是 2、8、10 或 16。

参考:ToInt32(String, Int32)

如果这不能满足您的所有需求,那么您需要更具体。

似乎0xFFFFFF(来自您的评论)在函数返回 16777215 时得到了正确处理。但是您应该提供所有可能的预期格式和预期结果的列表,您的问题在要求方面仍然含糊不清。您需要概述所有可能的情况,以及您希望能够执行的所有转换,然后才能制定出完整的解决方案。

【讨论】:

  • 很抱歉没有说得那么精确,但我仍在努力了解这个项目的所有方面。大多数数据必须转换为有符号或无符号整数,但上述字符串并非所有数据位。例如,我存储的值为 0x7FFFE0;在这 24 位中只有 15 位是数据,具体而言,LSB 为 6,MSB 为 20,该值必须转换为有符号整数。需要从其他一些中提取从 LSB 到 MSB 的单个位并将它们存储在 x 个不同的列中。考虑一个标准输入文件有数百列和数万行。
猜你喜欢
  • 1970-01-01
  • 2016-05-14
  • 2016-12-08
  • 1970-01-01
  • 2013-10-06
  • 2017-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多