6

我有什么

所以我正在为学校做这个大型项目,除了一个小而重要的部分外,我所有的东西都在工作。我正在处理的程序必须转换货币,并从 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

但仅当文件内的名称和值有空格分隔时。

4

3 回答 3

3

基本思想是这样的:

  • 从文件中读取每一行
  • 在空格键上分割线
  • 将 Country 存储为拆分的第一部分
  • 将金额存储为第二部分,格式为整数
  • 将 Country 和 Amount 投影到单独的数组中

这是 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
于 2012-11-20T13:52:02.843 回答
3

您正在寻找的是VB 常量,一组用于特殊字符(如制表符和换行符)的特殊字符串 - 链接上有一个列表,但您的列表尤其是vbTaband vbCrLf。你不需要导入任何东西——它们是内置在 VB 中的。

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

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

进而:

For Each s as String In dummyArray
  otherArray = Split(s, vbTab) ' to split on tab characters
于 2012-11-20T14:09:48.953 回答
1

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

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

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

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

从您的配对中获取相关值。

于 2012-11-20T13:21:51.730 回答