|
282 / 80 / 7
Регистрация: 19.04.2011
Сообщений: 223
|
||||||
Массив из файла С++14.11.2011, 23:30. Показов 2208. Ответов 12
Метки нет (Все метки)
Уважаемые форумчане, пишу программу, которая находит максимальный элемент массива, записанного в файле.
Вот такая реализация:
5 12.11 12.14 12.17 12.12 12.13 Где 5 количество элементов В выходной файл записывается номер максимального числа Теперь мне надо сделать так, чтобы входной файл не содержал количество элементов массива, а только сами элементы, записанные в одну строку. Помогите реализовать. Заранее спасибо.
0
|
||||||
| 14.11.2011, 23:30 | |
|
Ответы с готовыми решениями:
12
Заполнить динамический массив из файла и записать массив обратно в файл Заполнить массив строк из файла. Массив заполняется, но выводится не корректно |
|
60 / 60 / 10
Регистрация: 27.10.2011
Сообщений: 185
|
|
| 15.11.2011, 03:54 | |
|
Теперь два варианта. Либо пробежаться два раза по файлу (первый для подсчёта количества элементов), либо использовать динамическую структуру (vector, например).
0
|
|
|
Заблокирован
|
||
| 15.11.2011, 03:58 | ||
|
2. Узнать количество байт, которое занимает один элемент записанный в файл. 3. Количество элементов в файле = вес файла/ вес элемента. 4. Профит!
0
|
||
|
278 / 174 / 21
Регистрация: 10.07.2011
Сообщений: 441
|
||
| 15.11.2011, 04:26 | ||
|
0
|
||
|
Заблокирован
|
|||
| 15.11.2011, 04:27 | |||
|
Первый - потому что двойная работа. Зачем делать дважды то, что можно сделать за один раз? Чтение из файла итак операция дорогостоящая, и желательно данные сразу всем скопом считывать, что бы поменьше к харду обращаться. А вы предлагаете целый цикл пустить в холостую. Второй вариант ущербный, потому будит вызывать дорогостоящий реалок вектора. Для большого файла получится неоправданно дорогостоящие реалоки, с прорвой выброшенной на ветер памяти. Есть третий вариант: Узнать заранее, сколько элементов содержится в файле. Создать вектор сразу нужного размера. И закачать в него все данные сразу одним скопом (не в цикле по-элементно, а сразу весь файл целиком). Потом уже работать не с самим файлом, который на диске, и доступ к которому медленный. А с вектором, который в памяти, и доступ к данным будит быстрым. Запись данных - аналогично. Записать за один раз сразу весь вектор целиком, а не по-элементно. /зы Автор! Гугли "работа с файлами с++" "работа с бинарными файлами с++" "произвольный доступ к файлу с++" Добавлено через 56 секунд Если тип элемента - int, то он всегда будит весить строго sizeof(int)
0
|
|||
|
278 / 174 / 21
Регистрация: 10.07.2011
Сообщений: 441
|
||
| 15.11.2011, 04:32 | ||
|
создайте файл в котором будет 11.11 и посмотрите размер. в итоге если у меня в файле три числа, например 1.11 и 11.11 и 111.11то как посчитать количество элементов по размеру одного из них.
0
|
||
|
Заблокирован
|
||
| 15.11.2011, 04:38 | ||
|
Потому что вы путаете понятие "количество байт, которое занимает тип данных" с понятием "буковки вместо данных, которые запихивают в файл, открытый в текстовом режиме" Если я создам файл, и запишу в него элемент ТИПА double то какие бы значения типа double я не подставлял - размер файла не изменится. Поймите одну простую вещь: int a=5; весит абсолютно столько же, сколько int b=500 оби переменные весят sizeof(int);
0
|
||
|
278 / 174 / 21
Регистрация: 10.07.2011
Сообщений: 441
|
|
| 15.11.2011, 04:57 | |
|
Bers, я всего лишь пытаюсь следовать вашим инструкциям которые вы указали выше и для себя разобраться в том что мне интересно.
sizeof(double) = 8. если у меня в файле три числа которые визуально представляют из себя double 1.11 11.11 11.11, то мой файл будет иметь размер 16 байт. если следовать вашим инструкциям я должен разделить 16 на 8 и получить 2. что не верно. т.к. у меня три числа. вот и все. з.ы. я обязательно погуглю и найду нужные мне ответы. ваша инструкция выше кроме как на выполненные мной шаги, к сожалению, больше ни на что меня не наводит.
0
|
|
|
Заблокирован
|
||
| 15.11.2011, 05:04 | ||
|
В текстовом файле нет никаких доублов. Есть только текст. И цыферки в текстовом файле записываются как последовательности символов. Размер текстового файла естественно зависит от того, какой текст туда закачали. бинарный Файл с 3мя элементами типа доубл всегда будит весить 24 байта. Не важно, какие значения будут у этих элементов.
0
|
||
|
278 / 174 / 21
Регистрация: 10.07.2011
Сообщений: 441
|
|||
| 15.11.2011, 05:13 | |||
|
0
|
|||
|
Заблокирован
|
||
| 15.11.2011, 05:29 | ||
|
Ну если очень хочется, что бы работа шла именно с текстовым файлом - можно просто определить его структуру. Например, содержимое текстовика имеет вид: 12.11 12.14 12.17 12.12 12.13 Если формат файла гарантирует, что каждый элемент в текстовом виде имеет строго 5 байт (2 на целую часть, два на дробную, и один на символ точки) То можно считать что вес элемента - строго 5 байт. А дальше все как обычно. Единственное: придётся гарантировать, что ноль это 00.00, а не просто 0 Другой способ: 1 Узнаём вес текстового файла. 2 Создаём стринг нужного размера (что бы избежать реалоков) 3. Закачивает весь текстовик целиком в стринг. 4. Анализируем полученный массив чаров. В текстовом файле невозможно подсчитать количество строк, не подсчитав количество символов '\n' Ну или, невозможно подсчитать количество слов, не подсчитав количество символов ' ', '\n', '\0' и тд Но вообще то, если хочется быструю работу - то лучше юзать бинарный файл. А так любой файл посерьёзнее (ну взять хотя бы файлы bmp) имеют шапку. Которая имеет фиксированный размер, и в которой прописываются все необходимые служебные данные для быстрого чтения файла.
1
|
||
|
282 / 80 / 7
Регистрация: 19.04.2011
Сообщений: 223
|
|
| 15.11.2011, 08:07 [ТС] | |
|
Bers, дело в том, что в текстовом файлеe приблизительные курсы перевода доллара в рубль. То есть вида 30.24 Два знака целой части, точка, два знака дробной части. Их количество случайное, а записывать в исходный файл их можно либо в строку через пробел, либо построчно (в столбик). Если кто-то сможет переделать мой код,так как я спрашивал в первом сообщении(без количества элементов в файле) то буду очень благодарен.
0
|
|
|
114 / 114 / 13
Регистрация: 29.04.2010
Сообщений: 240
|
|||||||||||
| 15.11.2011, 11:24 | |||||||||||
Если же сам массив не нужен, только максимальный элемент, то можно вообще обойтись без вектора (работает при условии, что минимум один элемент в файле таки записан, иначе надо будет немного переделать):
0
|
|||||||||||
| 15.11.2011, 11:24 | |
|
Помогаю со студенческими работами здесь
13
Файлы и массив (сделать так, чтобы массив заполнялся значениями из этого же файла) Массив: передать динамический массив в функцию и записать в каждый элемент строку из файла Нужно записать массив в файл, а потом из этого файла считать этот же массив Считывание файла в массив и запись нового файла Создать массив структур Название файла, объем файла, дата создания Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2.
При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
|
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут.
https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc
Первый документ красиво выглядит, но без схемы.
Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
|
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере".
Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
|
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти".
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2.
В качестве источника данных. . .
|
|
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер
Написал заготовку:
dotnet new console --aot -o UrlHandler
var items = args. Split(":");
var tag = items;
var id = items;
var executable = args;. . .
|
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
|
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений.
9TO2GP2bpX4
a42b81fb172ffc12ca589c7898261ccb/
https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/
Слева синяя линия -. . .
|
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. .
Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
|