读取文本文件以投入数组

时间:2014-06-26 13:30:08

标签: c# string for-loop

我正在尝试读取文本文件并将数据放入字符串数组中。我需要这个来读取文本文件并在每个','之后拆分。之后,能够通过该数据(从逗号开始)到另一个字符串数组。我试过这个,但是我收到错误“无法将string []隐式转换为字符串。我认为它与我的split方法有关。

这是我的代码:

            string[] lines = System.IO.File.ReadAllLines("../../Privileges.txt");

            string[] names;
            for (int i = 0; i < lines.Length; i++)
            {
                names[i] = lines[i].Split(',');
            }

这是一个帮助进一步理解的例子。一个读取

的.txt文件

Joe Dirt,擎天柱,Jake the Snake

我想要制作出来的是:

names[0] = Joe Dirt
names[1] = Optimus Prime
names[2] = Jake the Snake

干杯

5 个答案:

答案 0 :(得分:1)

您尝试将字符串数组分配给字符串(split函数返回字符串数组)

你可以创建一个锯齿状的字符串数组,允许你将它们编入索引names[row][col]或者访问整行(作为数组)names[row]

string[] lines = System.IO.File.ReadAllLines("../../Privileges.txt");

string[][] names = new string[lines.Length][];
for (int i = 0; i < lines.Length; i++)
{
    names[i] = lines[i].Split(',');
}

要生成所需的输出,您可以将这些部分连接在一起:

foreach (string[] parts in names)
{
    Console.WriteLine(String.Join(" ", parts));
}

如果您不关心名称在哪一行,您只需要文件中所有名称的列表,您可以使用LINQ执行此操作:

string[] names = System.IO.File.ReadAllLines("../../Privileges.txt")
  .SelectMany((line) => line.Split(',')).ToArray();

编辑: 要读取特定行上的名称,您可以使用以下函数:

public static string[] GetNamesOnLine(int lineIndex, string filename)
{
    string[] lines = System.IO.File.ReadAllLines(filename);
    if (lineIndex >= lines.Length)
        throw new ArgumentException(String.Format("Line {0} does not exist in file. File contains only {1} rows", lineIndex, lines.Length));

    return lines[lineIndex].Split(',');
}

但即使您只想要第一行中的名称,这也不是非常有效,因为它只读取整个文件

答案 1 :(得分:1)

Split()方法返回string[],您将其分配给stringnames[i]

由于一行中有很多名字(我怀疑),你应该这样做:

List<string> nameList = new ArrayList<string>();
foreach(string line in lines)
    string[] namesLine = line.Split(',');
    foreach(string name in namesLine)
        nameList.Add(name);

如果您希望将nameList作为string[],则可以执行以下操作:

string[] names = nameList.ToArray();

答案 2 :(得分:0)

你可以使用

 string[] lines = System.IO.File.ReadAllLines("../../Privileges.txt");

 string[][] names;
 for(int i=0; i<lines.length; i++)
     names[i] = lines[i].Split(',');

答案 3 :(得分:-1)

您需要为names变量声明一个多维数组,因为它需要为txt文件的每一行存储不同的数组

string[][] names = new string[lines.Count()][];

答案 4 :(得分:-2)

试试这个:

string[] names = File.ReadAllText("../../Privileges.txt").Split(',');