将字符串分解为数组

时间:2012-11-20 13:16:12

标签: vb.net

我有什么

所以我正在为学校做这个大型项目,除了一个小而重要的部分之外,我的一切都在工作。我正在处理的程序必须转换货币,并从txt文件中获取费率。该文件如下所示:

USD 1,2694
JPY 100,44
BGN 1,955
CZK 25,396
DKK 7,45792
...

名称和值之间有一个制表符,以及值和下一个货币名称之间的换行符。值具有浮点,并且没有固定长度。

我需要什么:

我需要将此字符串分为两个数组currencyNames()currencyValues(),或者分成两维数组currency()

我能做些什么:

我可以使用

将文件从文件加载到字符串中
fileReader = My.Computer.FileSystem.ReadAllText("rates.txt")

我能够通过简单的循环将其分解为数组

Do While i < 32
    dummyArray = Split(fileReader, " ")
    i += 1
Loop

但仅当文件中的名称和值之间存在空格时。

3 个答案:

答案 0 :(得分:3)

基本理念是这样的:

  • 从文件中读取每一行
  • 拆分空格键上的行
  • 将国家/地区存储为拆分的第一部分
  • 将金额存储为第二部分,格式为整数
  • 将国家/金额投影为单独的数组

这是Vb.Net中的一个简单实现

Sub Main

    dim input = System.IO.File.ReadAllLines("c:\yourdata.txt")

    dim projection = from line in input
                    let split = line.Split(new string(){" "},StringSplitOptions.RemoveEmptyEntries)
                    select Country = split.First(), Amount = split.Last().Replace(",","").Parse()

    dim countries = projection.Select(function(p) p.Country).ToArray()
    dim amounts = projection.Select(function(p) p.Amount).ToArray()

End Sub

我还使用了一个小的扩展方法来包装Integer.TryParse

namespace ExtensionMethods
    public module Extensions
        <Extension()>_
        public function Parse(byval value as string) as integer
            dim i = 0
            if integer.TryParse(value,out i) then
                return i
            end if
            return 0
        end function
    end module
end namespace

答案 1 :(得分:3)

你要找的是VB Constants,一组特殊字符串,用于特殊字符,例如制表符和新行 - 链接上有一个列表,但特别是vbTab和{ {1}}。你不应该导入任何东西 - 它们是内置于VB的。

要使用它们,您可以将其更改为:

vbCrLf

然后:

dummyArray = Split(fileReader, vbCrLf) ' to split on lines

答案 2 :(得分:1)

ReadLine()和String.Split()的组合可以帮助您解决问题。

如果你是逐行读取每个项目,使用ReadLine(),你可以像这样拆分空间:

ReadLine().Split(' ').First(); 

ReadLine().Split(' ').Last(); 

从您的对中获取相关值。