Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.56/32: Рейтинг темы: голосов - 32, средняя оценка - 4.56
29 / 27 / 1
Регистрация: 27.09.2012
Сообщений: 123

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

16.08.2013, 18:16. Показов 7739. Ответов 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
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.08.2013, 18:16
Ответы с готовыми решениями:

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

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

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

95
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
16.08.2013, 22:06
Студворк — интернет-сервис помощи студентам
strcat тут не подойдет. Скорее подойдет strncpy.
0
29 / 27 / 1
Регистрация: 27.09.2012
Сообщений: 123
16.08.2013, 22:09  [ТС]
Цитата Сообщение от castaway Посмотреть сообщение
strcat тут не подойдет. Скорее подойдет strncpy.
вылетает прога. но пробовать буду

Добавлено через 1 минуту
Цитата Сообщение от alsav22 Посмотреть сообщение
В старом можно переписывать, если строки будут строго одинаковой длины. Такая гарантия есть?
Примерно так можно сделать:
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <string>
#include <fstream>
 
using namespace std;
 
int main()
{
    ifstream fin("file1.txt");
    if (!fin) cout << "Error!" << endl;
    else
    {
        string temp;
        while (getline(fin, temp))
            cout << temp << endl;
        cout << endl;
        
        fin.clear();
        fin.seekg(0);
        
        string str1, str2;
        int i = 0, n = 2, m = 7;
        while (getline(fin, temp))
        {
            ++i;
            if (i == n) str1 = temp;
            if (i == m) str2 = temp;
        }
        fin.clear();
        fin.seekg(0);
        i = 0;
 
        ofstream fout("file2.txt");
        
        while (getline(fin, temp))
        {
            ++i;
            if (i == n) fout << str2 << endl;
            else if (i == m) fout << str1 << endl;
                 else fout << temp << endl;
        }
        fout.close();
        fin.close();
        //fout.open("file1.txt");
 
        fin.open("file2.txt");
        while (getline(fin, temp))
            cout << temp << endl;
        cout << endl;
        
        fin.close();
    }
  
    system("pause");
    return 0;
}
вставляешь строку в файл он либо затирал символы(эффект, если нажать insert и писать). либо вставлял в конец
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
16.08.2013, 22:14
Цитата Сообщение от vodilawofer Посмотреть сообщение
вставляешь строку в файл он либо затирал символы(эффект, если нажать insert и писать). либо вставлял в конец
Мой код? А как же скрины? Где там что затёрто? Покажите как вставляете. И почему вставляете? Насколько я понял, задача - поменять местами строки в файле?
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
16.08.2013, 22:18
vodilawofer, мой тебе совет: если возникают проблемы с тем что тебе посоветовали, и ты не можешь их решить, выкладывай код и прикрепляй к нему скриншот с показанием проблемы/логи с ошибками - помощь от форумчан последует намного быстрее.
0
29 / 27 / 1
Регистрация: 27.09.2012
Сообщений: 123
16.08.2013, 22:22  [ТС]
изза разности длин строк нужно будет двигать часть, которая находиться между ними, в ту или иную сторону.

Добавлено через 2 минуты
Цитата Сообщение от alsav22 Посмотреть сообщение
Мой код? А как же скрины? Где там что затёрто? Покажите как вставляете. И почему вставляете? Насколько я понял, задача - поменять местами строки в файле?
там было написано что я экспериментировал, сам до того как создать тему. alsav22,Ваш пример очень понравился. С виду простой.
Я его позже посмотрю. Большое спасибо
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
16.08.2013, 22:28
Цитата Сообщение от vodilawofer Посмотреть сообщение
изза разности длин строк нужно будет двигать часть, которая находиться между ними, в ту или иную сторону.
Это очевидно, об этом давно было сказано:
Цитата Сообщение от castaway Посмотреть сообщение
Я тут подумал и сделал вывод:
Самая главная проблема в том, что если строки разных размеров то придется читать данные от начала первой строки до конца второй. Выделять то что находится между строками, сохранять это, менять строки местами, записывать первую строку, потом записывать то что находилось между ними, потом вторую. Размер данных при этом не меняется.
Здесь очень поможет MapViewOfFile, по-другому через MapViewOfFile только извращения.
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
16.08.2013, 22:37

Не по теме:

Цитата Сообщение от vodilawofer Посмотреть сообщение
там было написано что я экспериментировал, сам до того как создать тему.
Непонятно только: зачем о своих экспериментах писать под цитатой с моим кодом...



Добавлено через 3 минуты
Цитата Сообщение от castaway Посмотреть сообщение
Выделять то что находится между строками, сохранять это, менять строки местами, записывать первую строку, потом записывать то что находилось между ними, потом вторую.
Если нужно будет поменять первую и последнюю строки? И где это всё должно происходить? Файл 2 ГБ?
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
16.08.2013, 22:39
alsav22, честно говоря, не понял вопроса.
0
29 / 27 / 1
Регистрация: 27.09.2012
Сообщений: 123
16.08.2013, 22:41  [ТС]
Цитата Сообщение от alsav22 Посмотреть сообщение

Не по теме:


Непонятно только: зачем о своих экспериментах писать под цитатой с моим кодом...



Добавлено через 3 минуты

Если нужно будет поменять первую и последнюю строки? И где это всё должно происходить? Файл 2 ГБ?

Не по теме:

Извиняюсь.


в файле, примерно 2 гб. строки выбираются рандомно.
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
16.08.2013, 22:41
Это всё описываются операции с файлом или с памятью?
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
16.08.2013, 22:42
Цитата Сообщение от alsav22 Посмотреть сообщение
Если нужно будет поменять первую и последнюю строки? И где это всё должно происходить? Файл 2 ГБ?
Осознал вопрос. Нет, память понадобится только для тех данных, которые мы прочитаем, и в последствии будем записывать.
0
29 / 27 / 1
Регистрация: 27.09.2012
Сообщений: 123
16.08.2013, 22:43  [ТС]
память
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
16.08.2013, 22:45
Если с файлом, и нужно поменять первую и последнюю строку, то файл прийдётся переписать два раза. У меня вариант: одно быстрое чтение (читаются только две строки, в остальное время просто двигается курсор) и одна запись файла.

Добавлено через 1 минуту
Цитата Сообщение от vodilawofer Посмотреть сообщение
память
И где столько возьмёте? castaway, вы что-то мне насчёт вектора говорили?
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
16.08.2013, 22:45
alsav22, мы же остановились на MapViewOfFile ! ТС это устраивает.
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
16.08.2013, 22:46
Цитата Сообщение от castaway Посмотреть сообщение
Нет, память понадобится только для тех данных, которые мы прочитаем, и в последствии будем записывать.
То есть? Поконкретнее можно?
0
29 / 27 / 1
Регистрация: 27.09.2012
Сообщений: 123
16.08.2013, 22:47  [ТС]
Главное чтобы быстро операции происходили.
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
16.08.2013, 22:47
Цитата Сообщение от alsav22 Посмотреть сообщение
castaway, вы что-то мне насчёт вектора говорили?
Да, я говорил вам на счет вектора в 27-м посте ( Символ новой строки )
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
16.08.2013, 22:48
Цитата Сообщение от castaway Посмотреть сообщение
ТС это устраивает.
Устроит или нет будет видно, когда сделает (если сделает). Пока это только благие намерения. Я не настаиваю на своём варианте, но мне кажется, что по ресурсам это менее затратно.
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
16.08.2013, 22:49
Цитата Сообщение от alsav22 Посмотреть сообщение
То есть? Поконкретнее можно?
Повторюсь еще раз. MapViewOfFile ТС устраивает. Или вы о чем?
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
16.08.2013, 22:52
Цитата Сообщение от castaway Посмотреть сообщение
Да, я говорил вам на счет вектора в 27-м посте
Вопрос в количестве памяти, что не хватит, чтобы с таким файлом в памяти работать. Я правильно понял, насчёт вектора?

Добавлено через 1 минуту
Цитата Сообщение от castaway Посмотреть сообщение
Или вы о чем?
Я о том, какое количество данных вы предполагаете в память писать? Сколько?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.08.2013, 22:52

Ошибка: символ новой строки в потоке
После того как указываю 1 пункт (к-ство квартир),то мне выбивает сразу 2 и 3,а не поочередно,подскажите где я ошибся? #include...

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Сезонность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет. Но обычно это 50 лет и более. Наверное, закисление почвы происходит сезонно в средней. . .
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи. Через несколько переработок от PHP кода к C89 (надеюсь, 89). Но довольно запутанно получилось. Код для Linux. Но если убрать time и то, что с ним. . .
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
rest api anylogic - выполнение модели на своём русском сайте
anaschu 02.07.2026
Как подружиться с AnyLogic Cloud API, победить провайдеров и развернуться Java-бэкенд в Docker на бесплатном хостинге: Двухдневный лог борьбы Всем привет! Хочу поделиться свежим (и довольно. . .
Где деньги лежат
kumehtar 02.07.2026
Это - японская подводная лодка I-52 (тип C2, кодовое имя Momi) вышла из Японии в марте 1944 года с миссией в оккупированную немцами Францию (Лорьян). Это была одна из «Янаги»-миссий по обмену. . .
Krabik для WoW 3.3.5a, многоязычный
AmbA 02.07.2026
Допилил бота, думаю что окончательно. Изменения: - добавлена многоязычность - добавлено снятие скриншотов - добавлено поддержание бафов хождения по воде (для жреца, дк и шамана) - и так, по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru