2013-12-16 1 views
0

Вот мой код .. упражнение попросило записать эти целые числа в файл, затем открыть файл и заполнить двухмерный массив этими целыми числами из файла, а затем распечатать его на консоли.Заполнение массива из текстового файла, а затем его запись в консоли C#

Вот код, который я написал, и после запуска его в Visual Studio 2010 он дал мне странные ошибки ... можете ли вы помочь мне в этом, чтобы изучить, в чем проблема в коде?

Вот код, который я написал:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.IO; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      FileStream fs = new FileStream("C:\\Users\\Guest\\Desktop\\hi.txt", FileMode.Create); 
      StreamWriter sw = new StreamWriter(fs); 
      string filepath = "C:\\Users\\Guest\\Desktop\\hi.txt"; 

      sw.WriteLine("6,73,6,71"); 
      sw.WriteLine("32,1,0,12"); 
      sw.WriteLine("3,11,1,134"); 
      sw.WriteLine("43,15,43,6"); 
      sw.WriteLine("55,0,4,12"); 
      sw.Close(); 

      StreamReader sr = new StreamReader(fs); 
      int [,] data = new int[4,5]; 
      using (StreamReader reader = File.OpenText(filepath)) 
      { 
       for (int r = 0; r < data.GetLength(0); r++) 
       { 
        for (int c = 0; c < data.GetLength(1); c++) 
        { 
         /* 
         if (reader.EndOfStream) 
         { 
          return ricxvebi; 
         } 
         */ 
          data[r, c] = int.Parse(reader.ReadLine()); 
        } 
       } 
      } 

      var rowCount = data.GetLength(0); 
      var colCount = data.GetLength(1); 
      for (int row = 0; row < rowCount; row++) 
      { 
       for (int col = 0; col < colCount; col++) 
        Console.Write(String.Format("{0}\t", data[row, col])); 
       Console.WriteLine(); 
      } 


     } 
    } 
} 
+2

Что вы подразумеваете под «странными ошибками»? Пожалуйста, будьте более конкретными. – germi

+0

вы пытаетесь открыть файл, который уже открыт в строке 'using (StreamReader reader = File.OpenText (путь к файлу))' – Grundy

+0

Я удалил StreamReader sr = new StreamReader (fs); , но все же .. –

ответ

1

Я изменил некоторые из ваших кодов в вашей программе (комментарии будут помогите вам их узнать)

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.IO; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     string filepath = "C:\\Users\\Guest\\Desktop\\hi.txt"; // use these as common 
     FileStream fs = new FileStream(filepath,FileMode.Create); 
     StreamWriter sw = new StreamWriter(fs); 
     sw.WriteLine("6,73,6,71"); 
     sw.WriteLine("32,1,0,12"); 
     sw.WriteLine("3,11,1,134"); 
     sw.WriteLine("43,15,43,6"); 
     sw.WriteLine("55,0,4,12"); 
     sw.Close(); 
     string buffer = ""; 
     FileStream fs1 = new FileStream(filepath, FileMode.Open); // changes are here in FileMode 
     StreamReader sr = new StreamReader(fs1); 
     int[,] data = new int[5, 4]; // your array index is short 
     int i = 0, j = 0; 
     while ((buffer = sr.ReadLine()) != null) 
     { 
      var row = buffer.Split(','); 
      foreach (var rowItem in row) 
      { 
       data[i, j] = Convert.ToInt32(rowItem); 
       j++; 
      } 
      i++; j = 0; 
     } 
    } 
} 
+0

Спасибо, человек мне очень помог. –

+0

Добро пожаловать @GeoDrawkcab :) – manish

1

Filestream объект используется одно и то же в обоих вхождений. В обоих случаях он пытается создать файл из-за FileMode.Create. Попробуйте разбить его отдельно, например.

FileStream fs; 
fs = new FileStream(filepath, FileMode.Create); 

//Code to write to and close file 

fs = new FileStream(filepath, FileMode.Open); 

//code to read file to output 
1
  • содержание файла не соответствует вашему массиву
    использовать int [,] data = new int[5,4]; вместо int [,] data = new int[4,5];
  • data[r, c] = int.Parse(reader.ReadLine());ReadLine возвращает все строки, т.е. 6,73,6,71, поэтому при попытке разобрать его, как INT вы получаете ошибки. Для решения этой проблемы, например, вы можете использовать функции Split
  • от msdn: File.OpenText(filepath) эквивалентен перегрузке конструктора StreamReader(String).
  • и StreamReader и StreamWriter имеют конструкторы перегрузки с параметром string path, поэтому вам не нужно создавать новый поток мгновенно вручную. Вы можете попробовать что-то вроде этого

string filepath = "C:\\Users\\Guest\\Desktop\\hi.txt"; 
using(StreamWriter sw = new StreamWriter(filepath)){ 
     .... //your actions 
} 
.... 
using(StreamReader sw = new StreamReader(filepath)){ 
     .... //your actions 
} 

UPDATE

Пример использования Split функции

var numbersInString = reader.ReadLine().Split(','); 
for(int i = 0; i< numbersInString.Length;i++){ 
    var num = int.Parse(numbersInString[i]); 
} 
+0

Спасибо за ответ ... , но я до сих пор не мог» t выяснить часть кода с помощью функции Split при анализе целых чисел с readline ... можете ли вы помочь мне с этим>? –

+0

@GeoDrawkcab смотри новость – Grundy

Смежные вопросы