代码不执行

时间:2013-09-14 17:08:13

标签: c# file for-loop

我知道在过去的几天里,我遇到了一些痛苦,也就是我所有的问题,但是我一直在开发这个项目,而且我(比喻)距离完成它还有几英寸。 / p>

话虽这么说,我希望你能帮到另外一件事。它与我以前的问题有关,但你不需要那些代码。问题恰恰在于这段代码。我想要的是帮助我识别它,从而解决它。

在我向您展示我一直在努力的代码之前,我想说几件额外的事情:

  1. 我的应用程序具有文件合并功能,将两个文件合并在一起并处理重复的条目。
  2. 在任何给定文件中,每一行都可以使用以下四种格式之一(最后三种是可选的):Card Name|Amount.Card Name|Amount..Card Name|Amount_Card Name|Amount。< / LI>
  3. 如果某行格式不正确,程序将跳过它(完全忽略它)。
  4. 因此,基本上,示例文件可以如下:

    Blue-Eyes White Dragon|3
    ..Blue-Eyes Ultimate Dragon|1
    .Dragon Master Knight|1
    _Kaibaman|1
    

    现在,当涉及到使用文件合并时,如果一行以一个特殊字符. .. _开头,它应该采取相应的行动。对于.,它运行正常。对于以..开头的行,它将索引移动到第二个点,最后,它完全忽略_行(它们有另一个与此讨论无关的用法)。

    这是我的合并函数代码(由于某些奇怪的原因,第二个循环中的代码根本不会执行):

    if (openFileDialog1.ShowDialog() == DialogResult.OK)
    {
        // Save file names to array.
        string[] fileNames = openFileDialog1.FileNames;
    
        // Loop through the files.
        foreach (string fileName in fileNames)
        {
            // Save all lines of the current file to an array.
            string[] lines = File.ReadAllLines(fileName);
    
            // Loop through the lines of the file.
            for (int i = 0; i < lines.Length; i++)
            {
                // Split current line.
                string[] split = lines[i].Split('|');
    
                // If the current line is badly formatted, skip to the next one.
                if (split.Length != 2)
                    continue;
    
                string title = split[0];
                string times = split[1];
    
                if (lines[i].StartsWith("_"))
                    continue;
    
                // If newFile (list used to store contents of the card resource file) contains the current line of the file that we're currently looping through...
                for (int k = 0; k < newFile.Count; k++)
                {
                    if (lines[i].StartsWith(".."))
                    {
                        string newTitle = lines[i].Substring(
                            lines[i].IndexOf("..") + 1);
    
                        if (newFile[k].Contains(newTitle))
                        {
                            // Split the line once again.
                            string[] secondSplit = newFile.ElementAt(
                                newFile.IndexOf(newFile[k])).Split('|');
                            string secondTimes = secondSplit[1];
    
                            // Replace the newFile element at the specified index.
                            newFile[newFile.IndexOf(newFile[k])] =
                                string.Format("{0}|{1}", newTitle, int.Parse(times) + int.Parse(secondTimes));
                        }
                        // If newFile does not contain the current line of the file we're looping through, just add it to newFile.
                        else
                            newFile.Add(string.Format(
                                            "{0}|{1}",
                                            newTitle, times));
    
                        continue;
                    }
    
                    if (newFile[k].Contains(title))
                    {
                        string[] secondSplit = newFile.ElementAt(
                            newFile.IndexOf(newFile[k])).Split('|');
                        string secondTimes = secondSplit[1];
    
                        newFile[newFile.IndexOf(newFile[k])] =
                            string.Format("{0}|{1}", title, int.Parse(times) + int.Parse(secondTimes));
                    }
                    else
                    {
                        newFile.Add(string.Format("{0}|{1}", title, times));
                    }
                }
            }
        }
    
        // Overwrite resources file with newFile.
        using (StreamWriter sw = new StreamWriter("CardResources.ygodc"))
        {
            foreach (string line in newFile)
                sw.WriteLine(line);
        }
    

    我知道这是一段相当长的代码,但我相信所有这些都与某一点有关。我跳过了一些不重要的位(执行完所有操作后),因为它们完全不相关。

0 个答案:

没有答案