Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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
C# 在c语言中获取文本数据并将其拆分为两个独立的1D数组#_C#_Arrays_Input - Fatal编程技术网

C# 在c语言中获取文本数据并将其拆分为两个独立的1D数组#

C# 在c语言中获取文本数据并将其拆分为两个独立的1D数组#,c#,arrays,input,C#,Arrays,Input,我正在做一个项目,我完全被卡住了。我基本上需要从如下格式的文件中读取文本数据: 每行4个数字,用逗号分隔(没有硬性的行数设置,这个程序应该能够处理任意数量的行) 基本上,我只需要这个文本文档中的0元素和第3个(最后一个)元素,我需要将它们转换为int并将它们放入自己的数组中: 因此,对于0个元素,我将有一个数组(如果使用上面的文本示例): 因此,如果我说zeroArray[1]它将是4,如果我说thirdArray[0]它将是7(*这是使用上述示例数据,它需要能够处理任何数字) 我需要将这些数据

我正在做一个项目,我完全被卡住了。我基本上需要从如下格式的文件中读取文本数据:

每行4个数字,用逗号分隔(没有硬性的行数设置,这个程序应该能够处理任意数量的行)

基本上,我只需要这个文本文档中的0元素和第3个(最后一个)元素,我需要将它们转换为int并将它们放入自己的数组中:

因此,对于0个元素,我将有一个数组(如果使用上面的文本示例):

因此,如果我说
zeroArray[1]
它将是
4
,如果我说
thirdArray[0]
它将是
7
(*这是使用上述示例数据,它需要能够处理任何数字)

我需要将这些数据转换为
int
,并放入它们自己的数组中,以便以后可以对每个元素进行计算。我需要能够调用执行这些计算的方法(我将编写)

这就是我的问题所在

  • 我无法将
    intArray
    从while循环中拉出,因为它是在while循环中声明的,这是它的作用域。但是,如果我尝试将
    intArray
    声明为while循环之外,它会给出错误“使用未分配的局部变量
    intArray
    ”。当我在while循环内声明它,并尝试在while循环外使用
    intArray
    时,它会给我一个错误
    当前上下文中不存在名称intArray
    。所以我的主要问题是我需要能够访问
    intArray
    ,这样我就可以使用它作为我的方法的参数来对它执行计算

  • 我的第二个问题是
    intArray
    基本上保存所有4行数据。如果我在阵列[0]中打印
    ,它将打印出列出的所有第一个数字(使用上面的示例文本),并打印:

    二, 4. 三十三

  • 如果我在数组[3]中打印,它会打印文本数据中的所有第四个整数,如下所示:

    7
    8
    65
    
    我假设我需要做的是再做两个数组,一个用来保存文本的第一个元素,另一个用来保存文本的第四个元素,因为这些元素需要进行不同的处理

    我曾尝试制作数组来存储这些数据,但无论我做了什么尝试,它都不起作用。 当我打印它时,它会给出整个列表,而不是
    zeroArray[0]=2

    2
    4
    33
    
    如果然后打印
    zeroArray[1]
    ,预期为
    4
    ,它将再次打印出整个列表

    2
    4
    33
    

    不幸的是,我只能使用循环和一维数组。我不能使用列表、OOP或2D数组。因此,如果我可以使用列表/2D数组,那么编码就没有那么有效了

    我目前将值存储到int数组
    intArray
    ,因为我不确定如何创建一个for循环,以便能够将不同的值存储到两个不同的数组中。我真的想不出一个办法。我尝试的任何方法都失败了

    我可以使用两个数组而不是列表吗
    intArray
    确实保存转换后的整数值(4个不同的部分,我只需要其中2个用于计算)。是否要创建两个数组来保存
    intArray[0]
    intArray[3]
    值,以便我可以继续使用它们进行计算?还有,我怎样才能在循环之外使用这两个数组呢?如果我在循环外创建一个数组,它将不允许我在循环内使用它,如果我在循环内创建一个数组,它将不允许我在循环外使用它

    任何帮助都将不胜感激

    所附代码是当前正在使用的代码。因为我不知道如何正确存储这两个数组,所以我的代码中还没有包含它们

    static void Main(string[] args)
    {
    
        //declarations
        string inputString = "";
        string[] results;
        int holder = 0;
    
        //import file for reading
        FileStream inFile = new FileStream("input.txt", FileMode.Open, FileAccess.Read);
        StreamReader myStream = new StreamReader(inFile);
    
        //reads first line
        inputString = myStream.ReadLine();
    
    
        while (inputString != null)
        {
            //split the line
            results = inputString.Split(',');
            int[] intArray = new int[results.Length];
    
    
            //do whatever processing you need to do to store it
    
    
            for (int index = 0; index < results.Length; index++)
            {
                if (int.TryParse(results[index], out holder))
                {
                    intArray[index] = holder;
                }//end if
            }//end for
    
        //reads next line
        inputString = myStream.ReadLine();
    
    
    
        }//end while
    
        //This is a test to see if the ints are correctly stored
        Console.WriteLine(intArray[0]);  //<--error here stating that 'The name intArray' does not exist in the current context'
    
    }//end main
    
    static void Main(字符串[]args)
    {
    //声明
    字符串inputString=“”;
    字符串[]结果;
    int holder=0;
    //导入文件以进行读取
    FileStream inFile=新FileStream(“input.txt”,FileMode.Open,FileAccess.Read);
    StreamReader myStream=新的StreamReader(内嵌);
    //读第一行
    inputString=myStream.ReadLine();
    while(inputString!=null)
    {
    //分道扬镳
    结果=inputString.Split(',');
    int[]intArray=新的int[results.Length];
    //进行存储所需的任何处理
    for(int index=0;indexConsole.WriteLine(intArray[0]);//最简单的方法是使用List而不是array,因为您不知道文件有多少行,如果需要,可以使用
    ToArray()从列表中轻松获取数组
    列表的方法。编辑:由于您在注释中声明需要数组,因此代码会针对该用途进行调整。如果每行有四个数字,则此代码可能适用于您。我警告您,我从不检查一行中的数字是否少于四个:

    static void Main(string[] args) {
            {
    
                //declarations
            string inputString = "";
            string[] results;
            int holder = 0;
            int []zeroArray = new int[100];
            int []thirdArray = new int[100];
    
            //import file for reading
            FileStream inFile = new FileStream("input.txt", FileMode.Open, FileAccess.Read);
            StreamReader myStream = new StreamReader(inFile);
    
            //reads first line
            inputString = myStream.ReadLine();
            int count = 0;
            while (inputString != null)
            {
                //split the line
                results = inputString.Split(new char [] {','},StringSplitOptions.RemoveEmptyEntries);
                if (int.TryParse(results[0].Trim(), out holder))
                {
                    zeroArray[count] = holder;
                }
                if (int.TryParse(results[3].Trim(), out holder))
                {
                    thirdArray[count] = holder;
                }
                count++;
                if(count == zeroArray.Length)
                {
                    int capacity = zeroArray.Length;
                    int []oldArray = zeroArray;
                    zeroArray = new int[2*capacity];
                    oldArray.CopyTo(zeroArray,0);
                    oldArray = thirdArray;
                    thirdArray = new int[2*capacity];
                    oldArray.CopyTo(thirdArray,0);
                }
                //reads next line
                inputString = myStream.ReadLine();
            }//end while
    
    
         }//end main
    

    请注意,您必须定期检查阵列的容量是否超过,如果超过,则应使用以前容量的两倍创建新实例,并将旧实例复制到新实例中。此外,完成后,
    count
    将保存每个阵列中的数字。

    在文件中运行一次,并计算行数。Th您可以声明数组并通过再次运行读取数据

    static void Main(string[] args)
    {
    
        //declarations
        string inputString = "";
        string[] results;
        int holder = 0;
        int lines = 0;
    
        //import file for reading
        FileStream inFile = new FileStream("input.txt", FileMode.Open, FileAccess.Read);
        StreamReader myStream = new StreamReader(inFile);
    
        //reads first line
        inputString = myStream.ReadLine();
    
        while(inputString != null){
            lines++;
        }
    
        int[] zeroArray = new int[lines], thirdArray = new int[lines];
    
        FileStream inFile = new FileStream("input.txt", FileMode.Open, FileAccess.Read);
        StreamReader myStream = new StreamReader(inFile);
    
        //reads first line
        inputString = myStream.ReadLine();
    
        for(int line = 0 ; line < ilnes; line++)
        {
            //split the line
            results = inputString.Split(',');
            zeroArray[line] = int.Parse(results[0]);
            thirdArray[line] = int.Parse(results[3]);
    
            inputString = myStream.ReadLine();
        }//end for
    
        //zeroArray and thirdArray should have your info now
    
    }//end main
    

    你是linqed吗?那太容易了

     var splitted = System.IO.File.ReadAllLines("input.txt")
           .Select(i => i.Split(',')).ToArray();
     var zeroArray = splitted.Select(s => s[0]).ToArray();
     var thirdArray = splitted.Select(s => s[3]).ToArray();
    

    这是我尝试过的,效果很好。希望对你有所帮助。快乐分享知识

        using (StreamReader sr = new StreamReader(@"C:\Users\Administrator\Documents\test.txt"))
        {
            int[] ZeroArray = null;
            int[] ThirdArray = null;
    
            int[] ZeroArrayTemp = null;
            int[] ThirdArrayTemp = null;
    
            int[] tempZero = null;
            int[] tempThird = null;
    
            int i = 0;
    
            do
            {
                i++;
                string line = sr.ReadLine();
                string[] values = line.Split(',');
    
                //get value for ZeroArray
                int valueZero = int.Parse(values[0]);
    
                //get value for ThirdArray
                int valueThird = int.Parse(values[2]);
    
                ZeroArrayTemp = new int[i + 1];
                ThirdArrayTemp = new int[i + 1];
    
                if (tempZero != null)
                {
                    for (int j = 0; j < tempZero.Length - 1; j++)
                    {
                        ZeroArrayTemp[j] = tempZero[j];
                    }
                }
    
                if (tempThird != null)
                {
                    for (int j = 0; j < tempThird.Length - 1; j++)
                    {
                        ThirdArrayTemp[j] = tempThird[j];
                    }
                }
    
                ZeroArrayTemp.SetValue(valueZero, i - 1);
                ThirdArrayTemp.SetValue(valueThird, i - 1);
    
                tempZero = ZeroArrayTemp;
                tempThird = ThirdArrayTemp;
    
            }while(sr.Peek() != -1);
    
            //Copy valid value to final array
            ZeroArray = new int[ZeroArrayTemp.Length - 1];
            Array.Copy(ZeroArrayTemp, ZeroArray, ZeroArrayTemp.Length - 1);
    
            ThirdArray = new int[ThirdArrayTemp.Length - 1];
            Array.Copy(ThirdArrayTemp, ThirdArray, ThirdArrayTemp.Length - 1);
    
        }
    
    使用(StreamReader sr=new StreamReader(@“C:\Users\Administrator\Documents\test.txt”))
    {
    int[]零数组=null;
    int[]三达瑞
    
    //need to resize
    int[] newArray = new int[oldArray.Length *2];
    for(int i=0; i<oldArray.Length; i++){
        newArray[i] = oldArray[i];
    }
    oldArray = newArray;
    
     var splitted = System.IO.File.ReadAllLines("input.txt")
           .Select(i => i.Split(',')).ToArray();
     var zeroArray = splitted.Select(s => s[0]).ToArray();
     var thirdArray = splitted.Select(s => s[3]).ToArray();
    
        using (StreamReader sr = new StreamReader(@"C:\Users\Administrator\Documents\test.txt"))
        {
            int[] ZeroArray = null;
            int[] ThirdArray = null;
    
            int[] ZeroArrayTemp = null;
            int[] ThirdArrayTemp = null;
    
            int[] tempZero = null;
            int[] tempThird = null;
    
            int i = 0;
    
            do
            {
                i++;
                string line = sr.ReadLine();
                string[] values = line.Split(',');
    
                //get value for ZeroArray
                int valueZero = int.Parse(values[0]);
    
                //get value for ThirdArray
                int valueThird = int.Parse(values[2]);
    
                ZeroArrayTemp = new int[i + 1];
                ThirdArrayTemp = new int[i + 1];
    
                if (tempZero != null)
                {
                    for (int j = 0; j < tempZero.Length - 1; j++)
                    {
                        ZeroArrayTemp[j] = tempZero[j];
                    }
                }
    
                if (tempThird != null)
                {
                    for (int j = 0; j < tempThird.Length - 1; j++)
                    {
                        ThirdArrayTemp[j] = tempThird[j];
                    }
                }
    
                ZeroArrayTemp.SetValue(valueZero, i - 1);
                ThirdArrayTemp.SetValue(valueThird, i - 1);
    
                tempZero = ZeroArrayTemp;
                tempThird = ThirdArrayTemp;
    
            }while(sr.Peek() != -1);
    
            //Copy valid value to final array
            ZeroArray = new int[ZeroArrayTemp.Length - 1];
            Array.Copy(ZeroArrayTemp, ZeroArray, ZeroArrayTemp.Length - 1);
    
            ThirdArray = new int[ThirdArrayTemp.Length - 1];
            Array.Copy(ThirdArrayTemp, ThirdArray, ThirdArrayTemp.Length - 1);
    
        }