C# 在c语言中获取文本数据并将其拆分为两个独立的1D数组#
我正在做一个项目,我完全被卡住了。我基本上需要从如下格式的文件中读取文本数据: 每行4个数字,用逗号分隔(没有硬性的行数设置,这个程序应该能够处理任意数量的行) 基本上,我只需要这个文本文档中的0元素和第3个(最后一个)元素,我需要将它们转换为int并将它们放入自己的数组中: 因此,对于0个元素,我将有一个数组(如果使用上面的文本示例): 因此,如果我说C# 在c语言中获取文本数据并将其拆分为两个独立的1D数组#,c#,arrays,input,C#,Arrays,Input,我正在做一个项目,我完全被卡住了。我基本上需要从如下格式的文件中读取文本数据: 每行4个数字,用逗号分隔(没有硬性的行数设置,这个程序应该能够处理任意数量的行) 基本上,我只需要这个文本文档中的0元素和第3个(最后一个)元素,我需要将它们转换为int并将它们放入自己的数组中: 因此,对于0个元素,我将有一个数组(如果使用上面的文本示例): 因此,如果我说zeroArray[1]它将是4,如果我说thirdArray[0]它将是7(*这是使用上述示例数据,它需要能够处理任何数字) 我需要将这些数据
zeroArray[1]
它将是4
,如果我说thirdArray[0]
它将是7
(*这是使用上述示例数据,它需要能够处理任何数字)
我需要将这些数据转换为int
,并放入它们自己的数组中,以便以后可以对每个元素进行计算。我需要能够调用执行这些计算的方法(我将编写)
这就是我的问题所在
intArray
从while循环中拉出,因为它是在while循环中声明的,这是它的作用域。但是,如果我尝试将intArray
声明为while循环之外,它会给出错误“使用未分配的局部变量intArray
”。当我在while循环内声明它,并尝试在while循环外使用intArray
时,它会给我一个错误当前上下文中不存在名称intArray
。所以我的主要问题是我需要能够访问intArray
,这样我就可以使用它作为我的方法的参数来对它执行计算intArray
基本上保存所有4行数据。如果我在阵列[0]中打印,它将打印出列出的所有第一个数字(使用上面的示例文本),并打印:
二,
4.
三十三
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;index Console.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);
}