从文件读取创建数组

时间:2014-08-20 07:27:40

标签: c# arrays

我目前有一个.txt文件,其布局为:

text: value
text: value
text: value 
text: value
etc...

我如何才能获得一系列价值观? 甚至是一个阵列:

Arr[0] = text
Arr[1] = value
Arr[2] = text
etc...

我理解流读取器类等以及如何获得整行,但是当我拆分时,它不会让我添加到拆分数组以添加更多text: value对。

4 个答案:

答案 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;
    }