Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.94/18: Рейтинг темы: голосов - 18, средняя оценка - 4.94
3 / 3 / 2
Регистрация: 23.01.2011
Сообщений: 71

Перевод файла .dat в двумерный массив

23.01.2011, 23:12. Показов 3733. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В файле формата .dat написаны сначала ширина и длина массива(в разных строчках), а потом начинаются сами данные, которые нужно перевести в массив. Как это сделать? Если что извините, новичок, ничего такого на форуме не нашел....
Пример файла, который надо обработать:
3(ширина)
4(длина)
010
010
000
100
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.01.2011, 23:12
Ответы с готовыми решениями:

Двумерный массив из бинарного файла
Здравствуйте. С помощью BinaryWriter сохраняю имеющийся двумерный массив типа int в бинарный файл. Как теперь из этого бинарного файла...

Считать двумерный массив из файла
Доброго времени суток. Нужно считать двумерный массив из .txt файла. Имеется массив в файле 111 222 333 Нужно считать и вывести с...

Записать двумерный массив в переменную из файла
Доброго времени суток! Имеется файл, в котором записано неопределенное количество строк, в каждой строке находится неопределенное...

16
2 / 2 / 0
Регистрация: 22.01.2011
Сообщений: 5
24.01.2011, 01:30
Всем привет!

попробуй следующую методу в Main() вызвать:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
/// <summary>
        /// Эта мтода считывает массив из Text1.dat  и выводит его на cmd.
        /// </summary>
        /// <param name="_adr">Text1.dat должен лежать в... \bin\Debug</param>
        static void DatLesen(string _adr)
        {
            string stemp = String.Empty;
            int laenge = 0; //i
            int breit = 0; //j
            int count = 2;  
 
            //Aus datei lesen
            StringBuilder sb = new StringBuilder();
            StreamReader sr = new StreamReader(_adr);
            while (!sr.EndOfStream)
            {
                sb.Append((sr.ReadLine() + " "));                
            }
            //Umwandeln in Stringarray
            stemp = sb.ToString();
            string[] sarr = stemp.Split(' ');
            
            //Stringarray in suchenden Array umwandeln
            laenge = Convert.ToInt32(sarr[1].Remove(1));//i
            breit = Convert.ToInt32(sarr[0].Remove(1)); // j
 
            string [] stemparr = new string[sarr.Length - 2];
            char [] ctemp = new char [breit];
 
            for (int i = 0; i < stemparr.Length; i++)
            {
                stemparr[i] = sarr[count];
                count++;
            }
 
            int[,] result = new int[laenge, breit];
 
            for (int i = 0; i < laenge; i++)
            {
                ctemp = stemparr[i].ToCharArray();
                for (int j = 0; j < breit; j++)
                {
                    result[i,j] = Convert.ToInt32(ctemp[j].ToString());
                }
            }
 
            for (int i = 0; i < laenge; i++)
            {
                for (int j = 0; j < breit; j++)
                {
                    Console.Write(result[i,j]);
                }
                Console.WriteLine();
                
            }
Эта метода сильно привязана к вашему формату.
0
146 / 130 / 27
Регистрация: 20.12.2010
Сообщений: 242
24.01.2011, 10:18
eugru, чтото уж как то мудрено

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
using System;
using System.IO;
 
namespace file2matr
{
   class Program
   {
      static void Main(string[] args)
      {
         int cols;
         int rows;
         StreamReader sr = new StreamReader("1.dat");
         try
         {
            cols = Convert.ToInt32(sr.ReadLine());
            rows = Convert.ToInt32(sr.ReadLine());
         }
         catch (System.Exception ex)
         {
            Console.WriteLine("Ошибка в ширине или в длине");
            Console.ReadKey();
            return;
         }
         char[,] mass = new char[rows, cols];
         String str = String.Empty;
         int i = 0;
         while (!sr.EndOfStream)
         {
            str = sr.ReadLine();
            try
            {
               for (int j = 0; j < cols; j++ )
               {
                  mass[i, j] = str[j];
               }
               i++;
            }
            catch (System.Exception ex)
            {
               Console.WriteLine("Ошибка в элементах массива файла");
               Console.ReadKey();
               return;
            }
         }
         sr.Close();
         // Вывод массива
         for (i = 0; i < rows; i++)
         {
            for (int j = 0; j < cols; j++)
               Console.Write(mass[i,j] + " ");
            Console.WriteLine();
         }
         Console.ReadKey();
      }
   }
}
Консоль:
0 1 0
0 1 0
0 0 0
1 0 0
Добавлено через 3 минуты
содержимое файла 1.dat:
3
4
010
010
000
100
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
24.01.2011, 10:24
Цитата Сообщение от Droom Посмотреть сообщение
В файле формата .dat... в разных строчках
Откуда строки в бинарном файле?
0
146 / 130 / 27
Регистрация: 20.12.2010
Сообщений: 242
24.01.2011, 10:28
Цитата Сообщение от taras atavin Посмотреть сообщение
Откуда строки в бинарном файле?
ну наверное имелось ввиду, что 010 - это строка "010"
Автор ж ведь не уточнил в каком точно формате лежат данные.
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
24.01.2011, 10:32
И это *.dat?

Добавлено через 2 минуты
Я конечно понимаю, что *.dat - общее расширение для всех нестандартных форматов, какие хочет каждый девелопер, но чтоб до такой степени... Первый раз про текстовый *.dat читаю.
0
146 / 130 / 27
Регистрация: 20.12.2010
Сообщений: 242
24.01.2011, 12:01
ну и для случая, что это все же бинарный файл, но на строки разбиваются только размерность массива, а данные идут сплошным потоком:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
using System;
using System.IO;
 
namespace file2matr
{
   class Program
   {
      static void write()
      {
         BinaryWriter sw = new BinaryWriter(File.Open("2.dat", FileMode.Create));
         sw.Write('3'); sw.Write('\r'); sw.Write('\n');
         sw.Write('4'); sw.Write('\r'); sw.Write('\n');
         Byte[] mass = { 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0 };
         sw.Write(mass);
         sw.Close();
      }
      static void Main(string[] args)
      {
         write(); // формируем .dat файл, при необходимости - закомментировать
         int cols;
         int rows;
         BinaryReader sr = new BinaryReader(File.Open("2.dat", FileMode.Open));
         try
         {
            cols = sr.Read() - 0x30;
            sr.Read(); sr.Read();
            rows = sr.Read() - 0x30;
            sr.Read(); sr.Read();
         }
         catch (System.Exception ex)
         {
            Console.WriteLine("Ошибка в ширине или в длине");
            Console.ReadKey();
            return;
         }
         Byte[,] mass = new Byte[rows, cols];
         Byte[] array = sr.ReadBytes(cols * rows);
         for (int i = 0; i < rows; i++)
            for (int j = 0; j < cols; j++)
               try
               {
                  mass[i, j] = array[i * cols + j];
               }
               catch (System.Exception ex)
               {
                  Console.WriteLine("Ошибка в элементах массива файла");
                  Console.ReadKey();
                  return;
               }
         sr.Close();
         // Вывод массива
         for (int i = 0; i < rows; i++)
         {
            for (int j = 0; j < cols; j++)
               Console.Write((char)(mass[i, j] + 0x30) + " ");
            Console.WriteLine();
         }
         Console.ReadKey();
      }
   }
}
0
Заблокирован
24.01.2011, 12:14
d3nver, ты зря объявляешь переменную, которую не используешь. Вот здесь:
C#
1
2
3
4
5
6
catch (System.Exception ex)
               {
                  Console.WriteLine("Ошибка в элементах массива файла");
                  Console.ReadKey();
                  return;
               }
Тогда уж так:
C#
1
2
3
4
5
6
catch 
               {
                  Console.WriteLine("Ошибка в элементах массива файла");
                  Console.ReadKey();
                  return;
               }
Или так:
C#
1
2
3
4
5
6
catch (Exception ex)
         {
             Console.WriteLine(ex.Message);
            Console.ReadKey();
            return;
         }
0
146 / 130 / 27
Регистрация: 20.12.2010
Сообщений: 242
24.01.2011, 12:29
d3nver, ты зря объявляешь переменную, которую не используешь. Вот здесь:
Ну я автокомплитом вставлял try ... catch, там переменная автоматом добавляется
Но я буду исправляться!
0
3 / 3 / 2
Регистрация: 23.01.2011
Сообщений: 71
24.01.2011, 17:42  [ТС]
Привожу цитату из задачи:
В файлі sea_war.dat у першому рядку через пробіл записано n і m. У наступних m рядках записано підряд (без будь-яких роззділових символів) по n чисел 0 або 1. 0 означає: “клітинка вільна”, 1– “зайнята”.
(Перевод: в файле ... в первой строчке через пробел написано n и m. В следующих m строчках написано подряд (без ккаких-либо разделительных знаков) по n чисел 0 или 1)
Я про файлы .dat вообще ничего не знаю, думал так и надо.... А вообще тут прочитал условие еще раз и понял, что массив должен быть типа bool.

И еще, в этой части( первый вариант решения от d3nver) инкремент i точно должен стоять после фигурных скобок?
C#
1
2
3
4
5
6
            
 for (int j = 0; j < cols; j++ )
               {
                  mass[i, j] = str[j];
               }
               i++;
0
146 / 130 / 27
Регистрация: 20.12.2010
Сообщений: 242
24.01.2011, 18:46
И еще, в этой части( первый вариант решения от d3nver) инкремент i точно должен стоять после фигурных скобок?
да
там в цикле while идет построчное считывание файла, и во внутреннем цикле for, заполнение строки матрицы по столбцам, индекс j.
И потом идет приращение индекса строк - i
1
3 / 3 / 2
Регистрация: 23.01.2011
Сообщений: 71
26.01.2011, 00:57  [ТС]
И еще вопрос... Там надо было б создать буллевый массив. Как трансформировать char(где есть только 0 и 1) в bool, 0 - false, 1 -true?
0
мастер топоров
 Аватар для Koran
917 / 742 / 101
Регистрация: 16.08.2009
Сообщений: 1,476
26.01.2011, 01:12
зачем char-массив? для этой цели можешь использовать byte. он и места мало занимает
0
3 / 3 / 2
Регистрация: 23.01.2011
Сообщений: 71
26.01.2011, 18:48  [ТС]
ТА я не знаю как правильно перевести char даже в byte...
0
11 / 11 / 2
Регистрация: 18.01.2010
Сообщений: 53
26.01.2011, 18:59
Цитата Сообщение от Droom Посмотреть сообщение
ТА я не знаю как правильно перевести char даже в byte...
На прямую по мойму никак можно так сделать:

C#
1
2
3
4
5
...
char ch = '1';
byte b = 0;
byte.TryParse(ch.ToString(), out b);
...
учти, что если в ch будет не значение типа byte а например буква какая нибудь, то в b всё равно будет 0.

Если всё таки надо bool:

C#
1
2
3
4
5
bool b = false;
if(ch == '0')
    b = false;
if(ch == '1')
    b = true;
Хотя так можно и с byte поступать, просто 1 или 0 присваивать.
1
3 / 3 / 2
Регистрация: 23.01.2011
Сообщений: 71
26.01.2011, 20:21  [ТС]
Та надо именно в bool, у меня там вся задача на проверке True/False основана
0
мастер топоров
 Аватар для Koran
917 / 742 / 101
Регистрация: 16.08.2009
Сообщений: 1,476
26.01.2011, 21:22
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace CharToBiilArray {
    class Program {
        static void Main(string[] args) {
            string boolSrtoke = "11001011001100101001010";
            bool[] boolArray = new bool[boolSrtoke.Length];
            for (int i = 0; i < boolSrtoke.Length; i++) {
                if (boolSrtoke[i] == '0')
                    boolArray[i] = false;
                else
                    boolArray[i] = true;
                }
            for (int i = 0; i < boolSrtoke.Length; i++) {
                Console.WriteLine(boolArray[i].ToString());
            }
            Console.ReadKey();
        }
    }
}
Добавлено через 2 минуты
или так,если есть массив char[] изначально
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace CharToBiilArray {
    class Program {
        static void Main(string[] args) {
            string boolSrtoke = "11001011001100101001010";
            bool[] boolArray = new bool[boolSrtoke.Length];
            char[] charBoolArray = new char[boolSrtoke.Length];
            charBoolArray = boolSrtoke.ToCharArray();
            for (int i = 0; i < boolSrtoke.Length; i++) {
                if (charBoolArray[i] == '0')
                    boolArray[i] = false;
                else
                    boolArray[i] = true;
                }
            for (int i = 0; i < boolSrtoke.Length; i++) {
                Console.WriteLine(boolArray[i].ToString());
            }
            Console.ReadKey();
        }
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.01.2011, 21:22
Помогаю со студенческими работами здесь

Записать информацию из файла в двумерный массив
Есть двумерный массив целых чисел. int mas = new int; в каждый элемент данного массива нужно записать число из файла файл: 1 2...

Создать двумерный массив из файла .txt
Создать двумерный массив и заполнить его из файла (первые два числа в файле задают количество строк и столбцов в массиве) Примерный вид...

Содержимое файла записать в двумерный массив
в файле хранятся числа в виде 2 2 2 1 1 2 1 1 записал их в двумерный массив. естественно что в массиве должны хранится в виде 2 2...

Как инициализировать двумерный массив с ASCII файла ?
Есть файл вида: ... 132 132 133 132 131 131 131 131 130 129 128 130 130 131 132 133 133 132 131 129 129 128 133 133 132 133 134...

Прочитать из текстового файла двумерный массив данных
Уважаемые господа! Стоит следующая производственная задача: прочитать из текстового файла двумерный массив данных (11*11), точнее...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru