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

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

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

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

16.08.2013, 18:16. Просмотров 3365. Ответов 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
vodilawofer
29 / 27 / 2
Регистрация: 27.09.2012
Сообщений: 123
16.08.2013, 19:36  [ТС] #16
Цитата Сообщение от castaway Посмотреть сообщение
Все верно. У меня прекрасно работает.
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <windows.h>
#include <cstdio>
 
int main( int argc, char *argv[] )
{
    HANDLE file = CreateFile( "test.txt", 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 );
 
    char *s1 = strstr(pvFileSrc, "\n" );
    printf( "%s\n", s1 );
 
    UnmapViewOfFile( pvFileSrc );
    CloseHandle( fileMap );
    CloseHandle( file );
    return 0;
}
Вывод: forum
У меня тоже) но до этого не работало. Я уж решил другим методом сделать и сюда написать.

Добавлено через 3 минуты
"На самом деле, к чему эти ухищрения с MapViewOfFile ?"

файл большой 1 2 гига. и надо поменять местами 2 строки
0
castaway
Эксперт С++
4885 / 3020 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
16.08.2013, 19:37 #17
Цитата Сообщение от vodilawofer Посмотреть сообщение
файл большой 1 2 гига. и надо поменять местами 2 строки
Это можно без труда сделать без использования MapViewOfFile.
0
vodilawofer
29 / 27 / 2
Регистрация: 27.09.2012
Сообщений: 123
16.08.2013, 19:39  [ТС] #18
Цитата Сообщение от castaway Посмотреть сообщение
Это можно без труда сделать без использования MapViewOfFile.
а как?
0
castaway
Эксперт С++
4885 / 3020 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
16.08.2013, 19:40 #19
Хотя нет, не всегда. Тут я поспешил с ответом. Файл состоит только и текстовых строк? Есть ли какая дополнительная информация в файле?
0
vodilawofer
29 / 27 / 2
Регистрация: 27.09.2012
Сообщений: 123
16.08.2013, 19:40  [ТС] #20
Цитата Сообщение от castaway Посмотреть сообщение
Хотя нет, не всегда. Тут я поспешил с ответом. Файл состоит только и текстовых строк?
думаю да. по поводу доп инфо, думаю ее не будет
0
castaway
Эксперт С++
4885 / 3020 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
16.08.2013, 19:41 #21
Цитата Сообщение от vodilawofer Посмотреть сообщение
думаю да
Как это понимать? Ты не знаешь какие данные ты обрабатываешь?
0
vodilawofer
29 / 27 / 2
Регистрация: 27.09.2012
Сообщений: 123
16.08.2013, 19:43  [ТС] #22
Цитата Сообщение от castaway Посмотреть сообщение
Как это понимать? Ты не знаешь какие данные ты обрабатываешь?
Я не знаю какие они будут. Не от меня зависит
0
castaway
Эксперт С++
4885 / 3020 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
16.08.2013, 19:47 #23
Цитата Сообщение от vodilawofer Посмотреть сообщение
Я не знаю какие они будут. Не от меня зависит
Если файл может состоять не только из текстовых строк, тогда смысл темы теряется. Если конечно ты не подразумеваешь двоичные данные с переводом строки, хоть это и не логично...
0
alsav22
5425 / 4820 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
16.08.2013, 19:49 #24
Цитата Сообщение от vodilawofer Посмотреть сообщение
надо поменять местами 2 строки
Как именно выбираются эти строки? По счёту? По содержанию? Как-то по другому?
0
vodilawofer
29 / 27 / 2
Регистрация: 27.09.2012
Сообщений: 123
16.08.2013, 19:50  [ТС] #25
Цитата Сообщение от castaway Посмотреть сообщение
Если файл может состоять не только из текстовых строк, тогда смысл темы теряется. Если конечно ты не подразумеваешь двоичные данные с переводом строки, хоть это и не логично...
Давайте продолжим тему. Будем считать что файл состоит из текстовых строк.
0
alsav22
5425 / 4820 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
16.08.2013, 19:52 #26
Самое простое, читать строки из файла в вектор, а там искать (если нужно что-то найти), переставлять и пр. Потом вектор записать в файл. И остаётся вопрос:
Цитата Сообщение от alsav22 Посмотреть сообщение
Как именно выбираются эти строки? По счёту? По содержанию? Как-то по другому?
1
castaway
Эксперт С++
4885 / 3020 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
16.08.2013, 19:53 #27
Цитата Сообщение от vodilawofer Посмотреть сообщение
Давайте продолжим тему.
Давайте. Тогда мне тоже интересно:
Цитата Сообщение от alsav22 Посмотреть сообщение
Как именно выбираются эти строки?
Добавлено через 43 секунды
Цитата Сообщение от alsav22 Посмотреть сообщение
Самое простое, читать из файла в вектор
Ты шутишь? Он сказал файл ~2ГБ.
0
vodilawofer
29 / 27 / 2
Регистрация: 27.09.2012
Сообщений: 123
16.08.2013, 19:58  [ТС] #28
Вот как я хочу. находится 1 строка. есть два указателя на начало и конец строки. все это дело ищется через strstr.
1 строку буфферизируем. смещаем данные strcpy. находим 2 строку. ЕЕ тоже буфф. смещаем. и вставляем строки на место

Добавлено через 1 минуту
выбираются рандомно по номеру.
0
alsav22
5425 / 4820 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
16.08.2013, 19:59 #29
Цитата Сообщение от vodilawofer Посмотреть сообщение
ЕЕ тоже буфф. смещаем. и вставляем.
Где это всё будет смещаться и вставляться? А если строки разной длины?
0
vodilawofer
29 / 27 / 2
Регистрация: 27.09.2012
Сообщений: 123
16.08.2013, 20:02  [ТС] #30
Цитата Сообщение от alsav22 Посмотреть сообщение
Где это всё будет смещаться и вставляться? А если строки разной длины?
в pvFileSrc. вот именно, изза разной длины строк я не могу использовать fseek, seekg и прочими фун-циями
0
16.08.2013, 20:02
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.08.2013, 20:02
Привет! Вот еще темы с ответами:

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

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

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

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


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

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

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