我目前有一个.txt
文件,其布局为:
text: value
text: value
text: value
text: value
etc...
我如何才能获得一系列价值观? 甚至是一个阵列:
Arr[0] = text
Arr[1] = value
Arr[2] = text
etc...
我理解流读取器类等以及如何获得整行,但是当我拆分时,它不会让我添加到拆分数组以添加更多text: value
对。
答案 0 :(得分:0)
如果你用空格分割一行,那么你将获得数组['text:','value','text:','value'...]。然后,您可以简单地遍历这些数组并通过删除最后一个char(即':')来修改奇数索引。
编辑: 如果你在最后有新行,你可以用空格分割每一行,并按照我上面所写的做。你也可以实现简单的算法和读取行,然后处理迭代遍历每个char,如果你当前的char是':',那么你将你的子串放到一个数组,然后迭代并忽略空间,然后迭代并将你的第二个子串放到一个数组的下一个索引。然后阅读下一行并重复我写的内容......
答案 1 :(得分:0)
实现目标有两种常用方法。
第一个: 您可以遍历文件的EACH LINE,将其拆分为“:”字符,修剪两边并将值存储在数组中。 例如。使用这样的LINQ-Query:
string[] array = File.ReadAllLines("TextFile1.txt")
.SelectMany(line => line.Split(':')
.Select(s => s.Trim()))
.ToArray();
或者使用正则表达式(RegEx):
var matches = new List<string>();
var regex = new Regex(@"^([^:]+):[ \t]+(.*?)[ \t]*$", RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace);
var matchResult = regex.Match(File.ReadAllText("TextFile1.txt"));
while (matchResult.Success)
{
matches.Add(matchResult.Groups[1].Value);
matches.Add(matchResult.Groups[2].Value);
matchResult = matchResult.NextMatch();
}
第二种方法更灵活......
答案 2 :(得分:0)
又一种方式。此方法仅将文件的一行保留在内存中:
string filename = "test.txt"; // Use your filename here.
int n = "text: ".Length;
var array =
File.ReadLines(filename)
.Select(item => item.Remove(0, n))
.ToArray();
答案 3 :(得分:0)
public static IEnumerable<string> ExtractValues(string path, char separator = ':')
{
if (path == null) throw new ArgumentNullException("path");
var values = new List<string>();
using (var sr = new StreamReader(path))
{
string line;
while ((line = sr.ReadLine()) != null)
{
var index = line.IndexOf(separator);
if (index >= 0)
{
values.Add(line.Substring(index + 1));
}
}
}
return values;
}