从文本文件中读取特定值并将它们放入列表中
Read specific values out of a text-file and put them in a list
我有一个包含很多行的文本文件,每一行如下所示:
"string string double double"每个值之间是一个space。我想读出每行的第一个字符串和最后一个双精度值,并将这两个值放入现有列表中。到目前为止,这是我的代码,但它并没有真正起作用。
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[...]
怎么样
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();
我会避免将钱存储在双精度值内,因为这可能会导致舍入问题。请改用 decimal
。这里的例子:Is a double really unsuitable for money?
你可以试试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();
您可以使用:
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);
use string.split 使用 space 作为分隔符在线将字符串转换为数组,每个值。然后只需访问第一个和最后一个数组元素。当然,如果您不确定每一行是否正好包含 4 个值,您可能需要检查数组的长度以确保至少有 4 个值。
使用拆分参考:
https://msdn.microsoft.com/en-us/library/ms228388.aspx
我同意@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])
};
}
- 以字符串形式读取整个文件。
- 使用 \r\n 作为行分隔符在 foreach 循环中拆分字符串。将每一行添加到字符串列表中。
- 遍历该列表并使用 space 作为字段分隔符在另一个循环中再次拆分每条记录,并将它们放入另一个字符串列表中。
- 现在所有四个字段都包含一行。现在只需使用 First 和 Last 方法来获取第一个单词和最后一个数字。
我有一个包含很多行的文本文件,每一行如下所示: "string string double double"每个值之间是一个space。我想读出每行的第一个字符串和最后一个双精度值,并将这两个值放入现有列表中。到目前为止,这是我的代码,但它并没有真正起作用。
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[...]
怎么样
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();
我会避免将钱存储在双精度值内,因为这可能会导致舍入问题。请改用 decimal
。这里的例子:Is a double really unsuitable for money?
你可以试试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();
您可以使用:
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);
use string.split 使用 space 作为分隔符在线将字符串转换为数组,每个值。然后只需访问第一个和最后一个数组元素。当然,如果您不确定每一行是否正好包含 4 个值,您可能需要检查数组的长度以确保至少有 4 个值。
使用拆分参考: https://msdn.microsoft.com/en-us/library/ms228388.aspx
我同意@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])
};
}
- 以字符串形式读取整个文件。
- 使用 \r\n 作为行分隔符在 foreach 循环中拆分字符串。将每一行添加到字符串列表中。
- 遍历该列表并使用 space 作为字段分隔符在另一个循环中再次拆分每条记录,并将它们放入另一个字符串列表中。
- 现在所有四个字段都包含一行。现在只需使用 First 和 Last 方法来获取第一个单词和最后一个数字。