C# C从文本文件读取数据并将结果写入文本文件时出错#
我想读取一个有C# C从文本文件读取数据并将结果写入文本文件时出错#,c#,C#,我想读取一个有8935900行的文本文件(如下面的一行),逐行将数据放入矩阵(多维数组),并将其保存在文本文件中,因为第一列是(I),第二列是(j)列(z[I][j]),第三列显示数组中该位置的值。例如z[1][0]=0.123413 1 0 0.123413 1 1 0.23423413 1 2 0.2234413 2 0 0.7456413 2 1 0.987651 2 2 0.0358413 3 0 0.4876513 3 1 0.986443 3 2 0.3465413 我写了一个剧本
8935900行的文本文件(如下面的一行),逐行将数据放入矩阵(多维数组),并将其保存在文本文件中,因为第一列是(I),第二列是(j)列(z[I][j]),第三列显示数组中该位置的值。例如z[1][0]=0.123413
1 0 0.123413
1 1 0.23423413
1 2 0.2234413
2 0 0.7456413
2 1 0.987651
2 2 0.0358413
3 0 0.4876513
3 1 0.986443
3 2 0.3465413
我写了一个剧本,我有两个问题:
1-代码的逻辑是否正确
2-如果正确;它显示一个错误“该进程无法访问文件'C:\\---1000.txt',因为它正被另一个进程使用”-IO异常未处理
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace _2test
{
class Program
{
static void Main(string[] args)
{
string line;
double[,] a = new double[89359, 100];
StreamReader file = new StreamReader("c:\\joao.txt");
for(int x=1;x<=8935900;x++)
{
line = file.ReadLine();
string[] values = line.Split(' ');
int i=0;
int j=0;
foreach(string value in values)
{
i = Convert.ToInt32(values[0]);
j = Convert.ToInt32(values[1]);
a[i, j] = Convert.ToDouble(values[2]);
}
var valuess = a.OfType<double>();
using (var filestream = new FileStream("1000.txt", FileMode.Create))
using (var streamwriter = new StreamWriter(filestream))
{
foreach (double value in values)
streamwriter.WriteLine(value);
}
}
}
}
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.IO;
名称空间测试
{
班级计划
{
静态void Main(字符串[]参数)
{
弦线;
double[,]a=新的double[89359100];
StreamReader文件=新的StreamReader(“c:\\joao.txt”);
对于(int x=1;x控制台。WriteLine(a)
将数组的类型而不是当前值写入控制台(然后写入文本文件)。改为如下更改代码:
// define i and j here
int i, j;
foreach(string value in values)
{
i = Convert.ToInt32(values[0]);
j = Convert.ToInt32(values[1]);
a[i, j] = Convert.ToDouble(values[2]);
}
然后更改此行:
Console.WriteLine(a);
致:
您可以在循环完成后创建新的文件流
和流编写器
。首先填充数组。然后在foreach循环之后:
var allValues = a.OfType<double>();
using(var filestream = new FileStream("1000.txt", FileMode.Create))
using(var streamwriter = new StreamWriter(filestream))
{
foreach(double value in values)
streamwriter.WriteLine(value);
}
var allValues=a.OfType();
使用(var filestream=newfilestream(“1000.txt”,FileMode.Create))
使用(var streamwriter=newstreamwriter(filestream))
{
foreach(值中的双值)
streamwriter.WriteLine(值);
}
这是完整的代码
private static void Main(string[] args)
{
string line;
double[,] a = new double[89359, 100];
StreamReader file = new StreamReader("c:\\joao.txt");
for (int x = 1; x <= 8935900; x++)
{
line = file.ReadLine();
string[] values = line.Split(' ');
int i, j;
foreach (string value in values)
{
i = Convert.ToInt32(values[0]);
j = Convert.ToInt32(values[1]);
a[i, j] = Convert.ToDouble(values[2]);
}
}
var allValues = a.OfType<double>();
using (var filestream = new FileStream("1000.txt", FileMode.Create))
using (var streamwriter = new StreamWriter(filestream))
{
foreach (double value in allValues)
streamwriter.WriteLine(value);
}
}
private static void Main(字符串[]args)
{
弦线;
double[,]a=新的double[89359100];
StreamReader文件=新的StreamReader(“c:\\joao.txt”);
对于(int x=1;x,请确保在使用代码时没有在另一个窗口中打开该文件,因为这会导致错误。处理完文件流和流读取器后,需要关闭它们。请使用using
习惯用法。谢谢@Selman22。如果我想在文本文件中看到结果(以矩阵形式)我该怎么办?@user3280040这是另一个故事。如果你还有其他问题,然后问一个新问题:)你的意思是我把它改成下面的一个吗?:int i=0;int j=0;foreach(值中的字符串值){i=Convert.ToInt32(值[0]);j=Convert.ToInt32(值[1]);a[i,j]=Convert.ToDouble(值[2]);}Console.WriteLine(a[i,j]);var valuess=a.OfType();使用(var filestream=new filestream(“1000.txt”,FileMode.Create))使用(var streamwriter=new streamwriter(filestream)){foreach(值中的双值)streamwriter.WriteLine(值);}@user3280040使用我的代码更改foreach循环。然后删除foreach中的所有控制台和filestream代码。将该代码(从var values=a.OfType();)放入循环之外。
。它显示错误:无法将此行中的'string'类型转换为'double'。//foreach(值中的double值)//还有一些变量是相同的,以前使用过类似的值@selman22
private static void Main(string[] args)
{
string line;
double[,] a = new double[89359, 100];
StreamReader file = new StreamReader("c:\\joao.txt");
for (int x = 1; x <= 8935900; x++)
{
line = file.ReadLine();
string[] values = line.Split(' ');
int i, j;
foreach (string value in values)
{
i = Convert.ToInt32(values[0]);
j = Convert.ToInt32(values[1]);
a[i, j] = Convert.ToDouble(values[2]);
}
}
var allValues = a.OfType<double>();
using (var filestream = new FileStream("1000.txt", FileMode.Create))
using (var streamwriter = new StreamWriter(filestream))
{
foreach (double value in allValues)
streamwriter.WriteLine(value);
}
}