Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
1 / 1 / 0
Регистрация: 23.02.2011
Сообщений: 69

Как инициализировать двумерный массив с ASCII файла ?

23.02.2011, 11:31. Показов 2246. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть файл вида:
Code
1
2
3
4
5
6
7
8
9
10
11
12
...
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 133 131 130 129 129 130
135 134 132 132 133 132 131 131 131 131 131
133 133 134 133 131 131 130 130 130 132 134
136 136 137 135 133 132 131 131 130 131 133
138 138 138 138 138 137 136 135 134 134 133
133 136 139 139 140 140 139 139 138 135 132
131 134 137 139 142 141 140 140 140 138 135
133 133 134 134 135 138 141 142 143 140 137
....
Размер его 6000х6000 элементов

1.Как инициализировать дмумерный массив данным файлом ?
2. Правильно ли использовать именно массив ? Иначе, как получить доступ к нужному элементу в файле ?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.02.2011, 11:31
Ответы с готовыми решениями:

Как инициализировать двумерный массив?
подскажите как инициализировать двумерный массив long long int mass;

Как инициализировать двумерный массив с клавиатуры?
Задача такая: дана целочисленная матрица MxN. Необходимо обеспечить пользователю ввод количества строк и столбцов, а также значений...

Как объявить и инициализировать двумерный массив
Доброго времени суток, уважаемые форумчане! Недавно решил постичь ДЗЕН STL-контейнеров C++ и начал с векторов. С одномерными векторами...

6
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
23.02.2011, 12:29
Цитата Сообщение от vekser Посмотреть сообщение
Как инициализировать дмумерный массив
Инициализировать просто int[,] mas = new int[6000, 6000];
А вот учитываешь ли ты , что такой массив отхватит ~145МБ(!) ОЗУ.
Неизвестно что у тебя за данные в этом файле, есть вариант сделать массив типа byte, тогда размер будет в 4 раза меньше, но максимальное значение элемента =255.
Цитата Сообщение от vekser Посмотреть сообщение
как получить доступ к нужному элементу в файле ?
Смотря что ты понимаешь под "доступом". Если "доступ для чтения", можно воспользоваться методом FileStream.Seek для чтения нужного значения. Для записи нужно поломать голову, чтобы уменьшить ресурсопотребление твоей софтины. Тут с потоками нужно повозиться.

Добавлено через 40 секунд
Цитата Сообщение от vekser Посмотреть сообщение
Правильно ли использовать именно массив ?
Если не морочиться на ресурсопотребление, то сойдет
1
389 / 304 / 67
Регистрация: 10.07.2010
Сообщений: 802
23.02.2011, 12:40
Использовать массив...думаю это не лучшая идея. Если я не ошибся в расчетах, то он будет кушать порядка 72мб. По мне так это многовато. Но код все-равно дам
C#
1
2
3
4
5
6
7
8
9
10
11
12
            StreamReader sr = new StreamReader(@"1.txt");
            string s;
            short[,] mas = new short[6000, 6000];          
            int j=0;
            while ((s = sr.ReadLine()) != null)
            {
                string[] mas_temp = s.Split(' ');
                for (int i = 0; i < mas_temp.Length; i++)
                    mas[j,i]=short.Parse(mas_temp[i]);
                j++;
            }            
            }
Так что по мне так, любой другой способ будет лучше. Как вариант:
C#
1
2
3
4
5
6
7
8
9
10
11
            int строка_содержащая_число = textBox1.Text;
            int номер_элемента_в_строке = textBox2.Text;
            int temp=0;
            while (temp != строка_содержащая_число)
            {
                sr.ReadLine();
                temp++;
            }
            short элемент;
            string[] mas_temp = sr.ReadLine().Split(' ');
            элемент = mas_temp[номер_элемента_в_строке];
1
1 / 1 / 0
Регистрация: 23.02.2011
Сообщений: 69
23.02.2011, 12:47  [ТС]
Цитата Сообщение от nio Посмотреть сообщение
Смотря что ты понимаешь под "доступом". Если "доступ для чтения", можно воспользоваться методом FileStream.Seek для чтения нужного значения.
Только чтение. Весь массив действительно не требуется, только десяток значений из него.

Спасибо, смотрю метод FileStream.Seek


2 zelen
Спасибо.
0
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
23.02.2011, 12:48
zelen, со строками не вариант. Как видно из примера каждое число содержит 3 символа + пробел, что есть четыре байта, а это тот же самый int, расчет смотрри в моем посте выше
0
1 / 1 / 0
Регистрация: 23.02.2011
Сообщений: 69
07.04.2011, 17:19  [ТС]
Зачем перед именем файла ставится @ ?
0
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
07.04.2011, 17:28
@ - строковый литерал
Из MSDN
Преимущество использования кавычек с @ заключается в том, что escape-последовательности не обрабатывается, благодаря чему можно удобно написать, например, полное имя и путь файла:
C#
1
@"c:\Docs\Source\a.txt"  // rather than "c:\\Docs\\Source\\a.txt"
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.04.2011, 17:28
Помогаю со студенческими работами здесь

Как инициализировать значениями динамический двумерный массив ?
Есть функция: static int ** MatrixMultiplication(int ** A, int ** B, int size = 4); Также есть namespace с двумя матрицами: ...

Не получается инициализировать двумерный массив
Здравствуйте, можно ли инициализировать массив как-нибудь вроде такого:double d = new double {{list.ToArray()},{}}, где list, это список...

Инициализировать двумерный массив слов длиной 6
Как инициализировать двумерный массив слов длиной 6 (то есть все слова состоят из 6 букв)? По идее, это двумерный массив указателей, но я...

Как считать двумерный массив из файла
Есть такой файл (изображение ниже), нужно считать заданный двумерный массив, как это сделать? Подобные темы уже рассматривались, знаю,...

Как считать в двумерный массив из файла?
массив 67 8 23 45 12 1 56 2 const int n = 2; const int m = 6; int a; fstream fs(&quot;myfile.txt&quot;);


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
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