Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
File 拆分以不同行分隔信息的文本文件_File_Text_Split - Fatal编程技术网

File 拆分以不同行分隔信息的文本文件

File 拆分以不同行分隔信息的文本文件,file,text,split,File,Text,Split,因此,我有一个文本文件,其中的信息由enter键分隔(我不知道如何解释,我将粘贴代码和一些东西) 下面是文本文件的外观,我需要将其分为三部分,第一部分是舞蹈类型,然后是舞者1和舞者2 using System; using System.Collections.Generic; using System.IO; namespace tanciskola { struct tanc { public string tancnev; public s

因此,我有一个文本文件,其中的信息由enter键分隔(我不知道如何解释,我将粘贴代码和一些东西)

下面是文本文件的外观,我需要将其分为三部分,第一部分是舞蹈类型,然后是舞者1和舞者2

using System;
using System.Collections.Generic;
using System.IO;

namespace tanciskola
{
    struct tanc
    {
        public string tancnev;
        public string tancos1;
        public string tancos2;
    }
    class Program
    {

        static void Main(string[] args)
        {
            #region 1.feladat
            StreamReader sr = new StreamReader("tancrend.txt");
            tanc[] tanc = new tanc[140];
            string[] elv;
            int i = 0;
            while (sr.Peek() != 0)
            {
                elv = sr.ReadLine().Split('I don't know what goes here');
                tanc[i].tancnev = elv[0];
                tanc[i].tancos1 = elv[1];
                tanc[i].tancos2 = elv[2];
                i++;
            }
            #endregion
            Console.ReadKey();
        }
    }
}
下面是我如何试图解决它的,虽然我真的不知道我应该怎么做。任务是显示第一个舞蹈和最后一个舞蹈,但为此,我需要以某种方式拆分它。

要按“输入字符”拆分,可以使用.NET中的Environment.NewLine:

这个常量将包含特定于操作系统(我猜是Windows)的序列

您应该知道,对于Windows和Linux/Unix,用于换行符的字符是不同的。因此,在极少数情况下,有人在不同的操作系统上编辑您的文件,您可能会遇到问题


在Windows上,换行符是两个字符的序列:回车+换行符(ASCII 13+10)。在Linux上,它只是换行。所以,如果你想变得更聪明,你可以先检查CRLF,如果你只从Split()中得到一个元素,然后再尝试LF。

正如我在评论中提到的,你似乎有一个文本文件,其中每个项目都在一个新行上,一组3行组成一个“记录”。在这种情况下,您只需读取文件的所有行,然后创建记录,如下所示:

var v = File.ReadLines("file path");

        tancr[] tanc = new tancr[140];

        for (int i = 0; i < v.Count(); i += 3)
        {                
            tanc[i/3].tancnev= v.ElementAt(i);
            tanc[i/3].tancos1 = v.ElementAt(i + 1);
            tanc[i/3].tancos2 = v.ElementAt(i + 2);
        }
var v=File.ReadLines(“文件路径”);
tancr[]tanc=新的tancr[140];
对于(int i=0;i

注意:
ReadLines()
在文件大小较大时更好。如果您的文件很小,您可以使用
ReadAllLines()

所以模式是dance,dancer1,dancer2,然后重复每个3行集合?如果是这样的话,你根本不需要分开。把所有的线都绕过去,这会给我两个错误。“string.Split(params char[])”的最佳重载方法匹配的参数“1”有一些无效的参数:无法从“string”转换为“char[]”我不知道为什么它不起作用。好吧,我做了(“\r”,“\n”),它似乎接受了它。新错误出现在tanc[i]行中。tancos1=elv[1];IndexOutOfRangeException未处理。索引超出了数组的界限。对不起,我已经更正了下面回答中的语法。String.Split()实际上比VB.NET的Split()稍微复杂一些,在VB.NET的Split()中,可以传入字符串。默认情况下,String.Split需要一个不同的单字符分隔符数组。我们想要的是一个单一的多字符(即字符串)分隔符,这是更复杂的重载给我们的。仍然给我相同的错误。可能还有另一种方式我没有考虑,因为这应该是一项简单的任务。是的,我想时间已经晚了,因为我在这个明显的问题上发呆了。您一次读取一行文件,这意味着您的字符串中永远不会有换行符。这就是为什么会出现IndexOutfrange异常。我已经调整了答案,一次阅读所有文本,但另一张海报是对的,逐行处理不需要拆分。我将答案留给后代,但这将是我建议的解决方案。尤其是文件更大的时候。好的,这几乎可以用了。但是我如何显示它们?如果我写Console.WriteLine(“{0}”,tanc[0].tancnev);它没有让我跳第一支舞。它到底是如何工作的?它显示了什么?循环从文件读取的行集合中读取,分配给变量,然后将计数器增加3,以读取下一组3行,即下一个记录编辑的答案。应为
i/3
,以前进到下一个数组索引<代码>i%3
将始终为0。我的错!
elv = sr.ReadAllText().Split(new string[] {Environment.NewLine}, StringSplitOptions.None);
var v = File.ReadLines("file path");

        tancr[] tanc = new tancr[140];

        for (int i = 0; i < v.Count(); i += 3)
        {                
            tanc[i/3].tancnev= v.ElementAt(i);
            tanc[i/3].tancos1 = v.ElementAt(i + 1);
            tanc[i/3].tancos2 = v.ElementAt(i + 2);
        }