我有什么:
所以我正在为学校做这个大型项目,除了一个小而重要的部分之外,我的一切都在工作。我正在处理的程序必须转换货币,并从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 :(得分: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();
从您的对中获取相关值。