【问题标题】:Reading text file to throw into an array读取文本文件以放入数组
【发布时间】:2014-06-26 13:30:08
【问题描述】:

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

这是我的代码:

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

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

所以举个例子来帮助进一步理解。一个 .txt 文件,内容为

乔·迪特、擎天柱、蛇杰克

我试图产生的结果是这样的:

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

干杯

【问题讨论】:

  • names 是一个字符串数组。根据您现在所做的,您需要它是一个字符串数组数组
  • 一线解决方案:string[] names = System.Text.RegularExpressions.Regex.Split(System.IO.File.ReadAllText("../../Privileges.txt").Trim(), @"\r\n|,\s*");

标签: c# string for-loop


【解决方案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(',');
}

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

【讨论】:

  • 是否有一种方法可以读取 .txt 文件中的特定行,例如我只想读取第 2 行的名称。不过,答案很好,我使用的是 linq 表达式,是有没有一种方法可以修改它来读取一个特定的行?干杯
【解决方案2】:

Split() 方法返回 string[],而您将其分配给 string (names[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();

【讨论】:

    【解决方案3】:

    你可以使用

     string[] lines = System.IO.File.ReadAllLines("../../Privileges.txt");
    
     string[][] names;
     for(int i=0; i<lines.length; i++)
         names[i] = lines[i].Split(',');
    

    【讨论】:

    • 他不想得到一个二维数组,你应该把它转换成一维
    【解决方案4】:

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

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

    【讨论】:

      【解决方案5】:

      试试这个:

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

      【讨论】:

        猜你喜欢
        • 2015-07-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-04
        相关资源
        最近更新 更多