从txt文件读取到数组/列表<>

时间:2016-01-16 17:57:19

标签: c# arrays list

我需要读取所有的.txt文件并将数据保存到数组/列表中。文件看起来像这样:

row11    row12    row13
row21    row22    row23
row31    row32    row33
字符串之间的

只是空格。

接下来,我将从数组/列表中插入数据<>到mysql,但这不是问题。 感谢。

编辑:我需要将3列插入mysql,如.txt文件。

4 个答案:

答案 0 :(得分:3)

使用String.Split(Char[], StringSplitOptions),其中第一个参数指定要使用空格和制表符拆分字符串,第二个参数指定忽略空条目(对于条目之间有多个空格的情况)

使用此代码:

var lines = System.IO.File.ReadAllLines(@"D:\test.txt");
var data = new List<List<string>>();
foreach (var line in lines)
{
    var split = line.Split(new[]{' ', '\t'}, StringSplitOptions.RemoveEmptyEntries);
    data.Add(split.ToList());
}

答案 1 :(得分:0)

您可以使用File.ReadLines()从文件中读取行,然后Regex.Split()将每行拆分为多个字符串:

static IEnumerable<String> SplitLines(string path, string splitPattern)
{
    foreach (string line in File.ReadAllLines(path))
        foreach (string part in Regex.Split(line, splitPattern))
            yield return part;
}

要按空格分割,您可以使用正则表达式模式\s+

var individualStrings = SplitLines(@"C:\path\to\file.txt", @"\s+");

您可以使用ToList()扩展名将其转换为列表:

List<string> individualStrings = SplitLines(@"D:\test\rows.txt", @"\s+").ToList();

答案 2 :(得分:0)

只要“值”中没有空格,那么一个简单的逐行解析器就可以工作。

一个简单的例子

var reader = new StreamReader(filePath);

var resultList = new List<List<string>>();

string line;

while ((line = reader.ReadLine()) != null)
{
    var currentValues = new List<string>();

    // You can also use a StringBuilder
    string currentValue = String.Empty;

    foreach (char c in line)
    {
        if (Char.IsWhiteSpace(c))
        {
            if (currentValue.Length > 0)
            {
                currentValues.Add(currentValue);

                currentValue = String.Empty;
            }
            continue;
        }

        currentValue += c;
    }

    resultList.Add(currentValues);
}

答案 3 :(得分:0)

根据Amadeusz的回答,这是一个漂亮的单行:

var lines = File.ReadAllLines(fileName).Select(l => l.Split(new[] { ' ', '\t' }, StringSplitOptions.RemoveEmptyEntries)).SelectMany(words => words);