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

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

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

Author24 — интернет-сервис помощи студентам
Всем привет) С маппировал текстовый файл в память.
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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.08.2013, 18:16
Ответы с готовыми решениями:

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

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

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

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

95
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
16.08.2013, 22:06 41
Author24 — интернет-сервис помощи студентам
strcat тут не подойдет. Скорее подойдет strncpy.
0
29 / 27 / 1
Регистрация: 27.09.2012
Сообщений: 123
16.08.2013, 22:09  [ТС] 42
Цитата Сообщение от 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
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
16.08.2013, 22:14 43
Цитата Сообщение от vodilawofer Посмотреть сообщение
вставляешь строку в файл он либо затирал символы(эффект, если нажать insert и писать). либо вставлял в конец
Мой код? А как же скрины? Где там что затёрто? Покажите как вставляете. И почему вставляете? Насколько я понял, задача - поменять местами строки в файле?
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
16.08.2013, 22:18 44
vodilawofer, мой тебе совет: если возникают проблемы с тем что тебе посоветовали, и ты не можешь их решить, выкладывай код и прикрепляй к нему скриншот с показанием проблемы/логи с ошибками - помощь от форумчан последует намного быстрее.
0
29 / 27 / 1
Регистрация: 27.09.2012
Сообщений: 123
16.08.2013, 22:22  [ТС] 45
изза разности длин строк нужно будет двигать часть, которая находиться между ними, в ту или иную сторону.

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

Не по теме:

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



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

Не по теме:


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



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

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

Не по теме:

Извиняюсь.


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

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

Добавлено через 1 минуту
Цитата Сообщение от castaway Посмотреть сообщение
Или вы о чем?
Я о том, какое количество данных вы предполагаете в память писать? Сколько?
0
16.08.2013, 22:52
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.08.2013, 22:52
Помогаю со студенческими работами здесь

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

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru