Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 24, средняя оценка - 5.00
vodilawofer
29 / 27 / 2
Регистрация: 27.09.2012
Сообщений: 123
#1

Символ новой строки - C++

16.08.2013, 18:16. Просмотров 3532. Ответов 95
Метки нет (Все метки)

Всем привет) С маппировал текстовый файл в память.
C++
1
2
3
4
5
6
7
HANDLE file = CreateFile(fileNameWChar, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
    
DWORD fileSize = GetFileSize(file, NULL);
 
HANDLE fileMap =  CreateFileMapping(file, NULL, PAGE_READWRITE, 0, 0, NULL);
 
char *pvFileSrc = (char *)MapViewOfFile(fileMap, FILE_MAP_WRITE, 0, 0, fileSize);
если в файле строки находятся на разных строках
пример:
cyber
forum

То в указатели pvFileSrc будет сплошной текст (cyberforum).

Пробовал strstr(pvFleSrc, "\n"), strcmp(pvFleSrc, "\n"), ничего не выходит((

Пожалуйста, подскажите как определить строку.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.08.2013, 18:16
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Символ новой строки (C++):

Символ новой строки в MFC - C++
При работе в MFC нужно вести протокол работы, то есть, сделали операцию a + b = c, записали в окно и т.д. Я создал Edit Control, с...

Std::cin, символ новой строки - C++
Подскажите, куда в данном примере после каждого cin'а девается символ новой строки? Насколько помню cin и cin.get его после себя оставляют...

Зачем здесь символ новой строки? - C++
Стивен Прата, Язык программирования С++, глава 7, пример 7 Никак не пойму, зачем здесь double temp; int i; for(i=0; i<limit;...

Отбрасывает ли std::cin символ новой строки? - C++
Здравствуйте. Есть следующий код (это задача из книги Праты): #include <iostream> const unsigned short strsize = 100; struct sBop ...

Будет ли добавлен символ новой строки при ошибочном вводе? - C++
После того, как пользователь введет число и нажмеn enter в поток будет передан символ новой строки '\n'. Будет ли добавлен символ новой...

Как убрать символ новой строки, применяя перегруженный оператор <<? - C++
Друзья! Ну то есть формируются строки хитрым способом (не вручную, лучше не углубляться в это) Потом получаю вектор этих строк. Надо...

95
castaway
Эксперт С++
4926 / 3033 / 372
Регистрация: 10.11.2010
Сообщений: 11,084
Записей в блоге: 10
Завершенные тесты: 1
17.08.2013, 16:49 #76
Считать он будет долго потому что размер файла велик. От этого никуда не денешься. Я бы на твоем месте сейчас не думал о скорости.
0
vodilawofer
29 / 27 / 2
Регистрация: 27.09.2012
Сообщений: 123
17.08.2013, 16:54  [ТС] #77
вы сказали что строка это обязательно \n. но для текст редактора это не так. ведь строка может не заканчиваться \n.
В текст редакторе это уже считается абзац. Как все таки лучше определять строки по \n или фикс размеру?

Добавлено через 1 минуту
Цитата Сообщение от castaway Посмотреть сообщение
Считать он будет долго потому что размер файла велик. От этого никуда не денешься. Я бы на твоем месте сейчас не думал о скорости.
300 меговый файл от начало до конца бежал долго, а тут 1-2.
0
castaway
Эксперт С++
4926 / 3033 / 372
Регистрация: 10.11.2010
Сообщений: 11,084
Записей в блоге: 10
Завершенные тесты: 1
17.08.2013, 17:00 #78
Цитата Сообщение от vodilawofer Посмотреть сообщение
вы сказали что строка это обязательно \n. но для текст редактора это не так. ведь строка может не заканчиваться \n.
В последней строке может не быть '\n', но тем не менее она будет строкой, во всех других случаях строки заканчиваются символом '\n'.

Цитата Сообщение от vodilawofer Посмотреть сообщение
В текст редакторе это уже считается абзац.
В текстовом редакторе символ '\n' считается символом перевода строки.

Цитата Сообщение от vodilawofer Посмотреть сообщение
300 меговый файл от начало до конца бежал долго, а тут 1-2.
Если знаешь способы которые работают быстрее - скажи мне. Я таких не знаю.
0
vodilawofer
29 / 27 / 2
Регистрация: 27.09.2012
Сообщений: 123
17.08.2013, 17:06  [ТС] #79
Как определить конец выделенной памяти у pvFileSrc?
0
castaway
Эксперт С++
4926 / 3033 / 372
Регистрация: 10.11.2010
Сообщений: 11,084
Записей в блоге: 10
Завершенные тесты: 1
17.08.2013, 17:10 #80
Цитата Сообщение от vodilawofer Посмотреть сообщение
Как определить конец выделенной памяти у pvFileSrc?
char *p_end = pvFileSrc + fileSize;
1
vodilawofer
29 / 27 / 2
Регистрация: 27.09.2012
Сообщений: 123
17.08.2013, 20:07  [ТС] #81
Цитата Сообщение от castaway Посмотреть сообщение
А как ты проверяешь что там находится?
смотрю в деббагере с помощью визуализации текста.

То нормально, то некорректно содежит инфу.
0
castaway
Эксперт С++
4926 / 3033 / 372
Регистрация: 10.11.2010
Сообщений: 11,084
Записей в блоге: 10
Завершенные тесты: 1
17.08.2013, 20:18 #82
Ты смотришь в дебагере лишнюю информацию. У тебя есть размер файла. Не надо выходить за границы мэппированного массива.
0
vodilawofer
29 / 27 / 2
Регистрация: 27.09.2012
Сообщений: 123
20.08.2013, 19:39  [ТС] #83
Я правильно понимаю? Размер маппированного файла должно быть меньше размера свободной памяти в ОЗУ?

Например, если свободно 100 мб, я не смогу с маппировать файл на 200 мб, да?
0
castaway
Эксперт С++
4926 / 3033 / 372
Регистрация: 10.11.2010
Сообщений: 11,084
Записей в блоге: 10
Завершенные тесты: 1
20.08.2013, 19:55 #84
Если файл смэппировать по каким-то причинам не получается, тогда одна из функций ( CreateFileMapping или MapViewOfFile ) должна вернуть ошибку.
А вообще я думаю что функционал ОС позволяет смэппировать файл, размер которого больше свободного размера ОЗУ, например подгружать ту часть файла к которой ты обращаешься.
К тому же, что мешает тебе это попробовать чтобы лично в этом убедится?
1
vodilawofer
29 / 27 / 2
Регистрация: 27.09.2012
Сообщений: 123
20.08.2013, 20:09  [ТС] #85
Цитата Сообщение от castaway Посмотреть сообщение
Если файл смэппировать по каким-то причинам не получается, тогда одна из функций ( CreateFileMapping или MapViewOfFile ) должна вернуть ошибку.
А вообще я думаю что функционал ОС позволяет смэппировать файл, размер которого больше свободного размера ОЗУ, например подгружать ту часть файла к которой ты обращаешься.
К тому же, что мешает тебе это попробовать чтобы лично в этом убедится?
я пробую чуть меньше 1гб маппирует. а уже 1.5 нет( .
функция getlasterror выдала ошибку №8. это, вроде как, недостаточно место.
0
castaway
Эксперт С++
4926 / 3033 / 372
Регистрация: 10.11.2010
Сообщений: 11,084
Записей в блоге: 10
Завершенные тесты: 1
20.08.2013, 20:15 #86
Цитата Сообщение от vodilawofer Посмотреть сообщение
я пробую чуть меньше 1гб маппирует. а уже 1.5 нет( .
А свободной памяти при этом сколько?

На днях обсуждалась тема, там парень аналог ArtMoney писал, так вот там есть пример того как мэппировать файл по частям с помощью функции VirtualQueryEx, только его нужно немного довести до ума..
0
vodilawofer
29 / 27 / 2
Регистрация: 27.09.2012
Сообщений: 123
20.08.2013, 20:19  [ТС] #87
Цитата Сообщение от castaway Посмотреть сообщение
А свободной памяти при этом сколько?

На днях обсуждалась тема, там парень аналог ArtMoney писал, так вот там есть пример того как мэппировать файл по частям с помощью функции VirtualQueryEx, только его нужно немного довести до ума..
примерно меньше 1 гб.
а ссылочку не подкинете? или в каком разделе искать.
0
castaway
Эксперт С++
4926 / 3033 / 372
Регистрация: 10.11.2010
Сообщений: 11,084
Записей в блоге: 10
Завершенные тесты: 1
20.08.2013, 20:21 #88
Хотя нет, вру, там немного другое было. В общем не суть. Если не хватает ОЗУ - просто мэппируй файл по частям. Функция MapViewOfFile позволяет это делать.

Добавлено через 1 минуту
Кстати, какая функция возвращает ошибку?
0
vodilawofer
29 / 27 / 2
Регистрация: 27.09.2012
Сообщений: 123
20.08.2013, 20:23  [ТС] #89
Цитата Сообщение от castaway Посмотреть сообщение
Хотя нет, вру, там немного другое было. В общем не суть. Если не хватает ОЗУ - просто мэппируй файл по частям. Функция MapViewOfFile позволяет это делать.

Добавлено через 1 минуту
Кстати, какая функция возвращает ошибку?
ф-ция:GetLastError()

по частям это, наверно, трудоемко
0
castaway
Эксперт С++
4926 / 3033 / 372
Регистрация: 10.11.2010
Сообщений: 11,084
Записей в блоге: 10
Завершенные тесты: 1
20.08.2013, 20:25 #90
Цитата Сообщение от vodilawofer Посмотреть сообщение
ф-ция:GetLastError()
Перед GetLastError еще какая-то функция возвращает ошибку?

Цитата Сообщение от vodilawofer Посмотреть сообщение
по частям это, наверно, трудоемко
Да, код надо будет переработать, но других выходов из ситуации я не вижу.
0
20.08.2013, 20:25
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.08.2013, 20:25
Привет! Вот еще темы с ответами:

Ввести символьную строку. Распечатать каждый символ массива с новой строки - C++
Ввести символьную строку. Распечатать каждый символ массива с новой строки.

Функция getline считывает несколько строк из файла, игнорируя символ новой строки - C++
Всем доброго дня! В С++ я новичок, сам себе придумываю задачки, просто для тренировки. Столкнулся с непонятным для меня поведением...

Вывести строки, в которых символ «*» встречается не менее 2 раз и заменить символ «*» на символ «_» - C++
День добрый. Имеется условие лабы. Написать программу, в которой с клавиатуры вводится до 10 символьных строк. Вывести строки, в...

Каждый символ строки заменить на следующий за ним, а последний символ строки заменяеть первым - C++
я написал код но не могу разобраться. вот дано : ---------------------------------------------------------- В текстовом файле fin.txt...


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

Или воспользуйтесь поиском по форуму:
90
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru