我有一个包含许多行的文本文件,每行看起来像这样: "字符串字符串double double"每个值之间是一个空格。我想读出每一行的第一个字符串和最后一个字符串,并将这两个值放在现有列表中。到目前为止,这是我的代码,但它确实没有用。
private void bOpen_Click(object sender, RoutedEventArgs e)
{
bool exists = File.Exists(@"C:\Users\p2\Desktop\Liste.txt");
if (exists == true)
{
StringBuilder sb = new StringBuilder();
using (StreamReader sr = new StreamReader(@"C:\Users\p2\Desktop\Liste.txt"))
{
Vgl comp = new Vgl();
comp.name = Abzahlungsdarlehenrechner.zgName;
comp.gErg = Abzahlungsdarlehenrechner.zgErg;
GlobaleDaten.VglDaten.Add(comp);
int i = 0;
string line = File.ReadLines(@"Liste.txt").Skip(0).Take(1).First();
while ((line = sr.ReadLine()) != null)
{
sb.Append((line));
listBox.Items.Add(line);
GlobaleDaten.VglDaten.Add(comp);
i++;
}
}
}
我已经读过这篇文章,但它没有帮助How do I read specific value[...]
答案 0 :(得分:2)
怎么样
List<Vgl> Result = File.ReadLines(@"C:\Users\p2\Desktop\Liste.txt")
.Select(x => new Vgl()
{
name = x.Split(' ').First(),
gErg = decimal.Parse(x.Split(' ').Last(), NumberStyles.AllowCurrencySymbol)
})
.ToList();
我会避免在doulbe值中存储钱,因为这可能会导致舍入问题。请改用decimal
。例如:Is a double really unsuitable for money?
答案 1 :(得分:2)
您可以尝试 Linq :
var source = File
.ReadLines(@"C:\Users\p2\Desktop\Liste.txt")
.Select(line => line.Split(' '))
.Select(items => new Vgl() {
name = items[0],
gErg = double.Parse(items[3])
});
// If you want to add into existing list
GlobaleDaten.VglDaten.AddRange(source);
// If you want to create a new list
//List<Vgl> list = source.ToList();
答案 2 :(得分:1)
您可以使用:
string[] splitBySpace = line.Split(' ');
string first = splitBySpace.ElementAt(0);
decimal last = Convert.ToDecimal(splitBySpace.ElementAt(splitBySpace.Length - 1));
编辑:处理货币符号:
string[] splitBySpace = line.Split(' ');
string pattern = @"[^0-9\.\,]+";
string first = splitBySpace.ElementAt(0);
string last = (new Regex(pattern)).Split(splitBySpace.ElementAt(splitBySpace.Length - 1))
.FirstOrDefault();
decimal lastDecimal;
bool success = decimal.TryParse(last, out lastDecimal);
答案 3 :(得分:1)
我同意@Dmitry和fubo,如果你正在寻找其他选择,你可以尝试一下。
var source = File
.ReadLines(@"C:\Users\p2\Desktop\Liste.txt")
.Select(line =>
{
var splits = line.Split(' '));
return new Vgl()
{
name = splits[0],
gErg = double.Parse(splits[3])
};
}
答案 4 :(得分:0)
使用string.split,使用space作为分隔符,将字符串放到具有每个值的数组中。然后只需访问第一个和最后一个数组元素。当然,如果您不确定每行包含4个值,您可能需要检查数组的长度以确保至少有4个值。
使用分裂的参考: https://msdn.microsoft.com/en-us/library/ms228388.aspx
答案 5 :(得分:0)