我有一个文本文件,里面有类似这样的东西。
汤姆1 2
曾傑瑞3 4
使用C#,我将其填充到两个数组中
第一组={汤姆,曾傑瑞}-1\f25 dim array -1\f6
第二个数组={(1,2),(3,4)} -2个数组
请帮我弄一下这个。任何帮助都将不胜感激。
Console.WriteLine("Enter the file name with extension:");
string filename = Console.ReadLine();
string s = System.IO.File.ReadAllText("C:/Desktop/" + filename);
Console.WriteLine("\n Text Details in the file: \n \n"+s);发布于 2011-03-13 09:32:47
有几种方式,这取决于你想要变得有多“优雅”,和/或汤姆、曾傑瑞是否总是一个词。
分析每一行
最简单的方法是这样的(快速、肮脏、非常脆弱的解决方案):
var path = "fileName.txt";
var names = new List<string>();
var values = new List<KeyValuePair<int, int>>();
using (var reader = File.OpenText(path))
{
string s = "";
while ((s = reader.ReadLine()) != null)
{
String[] arr = s.Split(' ');
names.Add(arr[0]);
values.Add(new KeyValuePair<int, int>(int.Parse(arr[1]), int.Parse(arr[2])));
}
}如果需要,您可以将列表转换为数组
发布于 2011-03-13 09:47:03
更完整的版本;)
string filename = "";
do
{
Console.WriteLine("Enter the file name with extension:");
filename = Environment.GetEnvironmentVariable("HOMEDRIVE") + Environment.GetEnvironmentVariable("HOMEPATH") + "\\Desktop\\" + Console.ReadLine();
if (!System.IO.File.Exists(filename))
Console.WriteLine("File doesn't exist!");
else
break;
} while (true);
System.IO.StreamReader readfile = new System.IO.StreamReader(filename);
List<string> Names = new List<string>();
List<int[]> Numbers = new List<int[]>();
string val = "";
while ((val = readfile.ReadLine()) != null)
{
if (val == string.Empty)
continue;
List<string> parts = val.Split(' ').ToList<string>();
Names.Add(parts[0]);
parts.RemoveAt(0);
Numbers.Add(parts.ConvertAll<int>(delegate(string i) { return int.Parse(i); }).ToArray());
}
readfile.Close();
//Print out info
foreach (string name in Names)
{
Console.Write(name + ", ");
}
Console.WriteLine();
foreach (int[] Numberset in Numbers)
{
Console.Write("{");
foreach (int number in Numberset)
Console.Write(number + ", ");
Console.Write("} ");
}
Console.ReadLine();发布于 2011-03-13 10:20:46
我喜欢函数式方法。
// var fileContent = System.IO.File.ReadAllText("somefilethathasthestuff");
var fileContent = @"Tom 1 2
Jerry 3 4";
var readData = fileContent.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries)
.Aggregate(new { names = new List<string>(), data = new List<int[]>() },
(result, line) => {
var fields = line.Split(new []{' '}, 2);
result.names.Add(fields[0]);
result.data.Add(fields[1].Split(new[] { ' ' }).Select(n => int.Parse(n)).ToArray());
return result;
}
);
string[] firstarray = readData.names.ToArray();
int[][] secondarray = readData.data.ToArray();这使用了一个数字的锯齿数组,但是如果你真的需要的话,你可以把它复制到一个2d数组中。更好的是,根本不要复制到数组。名称使用List < string>,数字使用List < int[] >。
https://stackoverflow.com/questions/5286750
复制相似问题