Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.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从文本文件读取数据并将结果写入文本文件时出错#_C# - Fatal编程技术网

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);
        }
    }