2012-11-20 136 views
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 

但只有当文件中有空格分隔名称和值时。

+0

尝试ReadAllLines(而不是ReadAllText() –

回答

3

你要找什么VB Constants,一组特殊字符,如标签,新的生产线的特殊字符串的 - 有在链接列表,但你的特别是vbTabvbCrLf。你不需要导入任何东西 - 它们被内置到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 
1

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

如果你要通过线读取每个项目行,使用的ReadLine(),然后你可以拆分在这样的空间:

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

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

来获得相关来自您的配对的价值。

3

的基本思路是这样的:

  • 从文件
  • 拆分空格键
  • 商店国家作为分割的第一部分就行了阅读每一行
  • 将金额作为第二部分存储,格式化为整数
  • 将国家和金额投影到单独阵列中

这是Vb中的一个简单实现。净

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

+1,但它目前尚不清楚如果你在TAB或SPACE上分割了源。不应该vbTab是一个更好的解决方案? '.Split(New String(){vbTab},' – igrimpe

+0

@igrimpe我同意,它不是100%清楚。如果它应该是tab是一个足够简单的变化。呃澄清它在示例数据中不清楚它是否是一个空格或100%的选项卡,我随空间走,但这是一个很好的观点。 – asawyer