我需要读取所有的.txt文件并将数据保存到数组/列表中。文件看起来像这样:
row11 row12 row13
row21 row22 row23
row31 row32 row33
字符串之间的只是空格。
接下来,我将从数组/列表中插入数据<>到mysql,但这不是问题。 感谢。
编辑:我需要将3列插入mysql,如.txt文件。
答案 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);