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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 24, средняя оценка - 5.00
vodilawofer
29 / 27 / 2
Регистрация: 27.09.2012
Сообщений: 123
16.08.2013, 18:16     Символ новой строки #1
Всем привет) С маппировал текстовый файл в память.
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"), ничего не выходит((

Пожалуйста, подскажите как определить строку.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.08.2013, 18:16     Символ новой строки
Посмотрите здесь:

Символ новой строки в MFC C++
C++ функция getline считывает несколько строк из файла, игнорируя символ новой строки
C++ Ввести символьную строку. Распечатать каждый символ массива с новой строки
Найти символ первой строки, который первым не совпал с одним из символов второй строки. Вывести слово, в которое входит этот символ C++
C++ Как убрать символ новой строки, применяя перегруженный оператор <<?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
castaway
Эксперт С++
4844 / 2983 / 367
Регистрация: 10.11.2010
Сообщений: 11,016
Записей в блоге: 10
Завершенные тесты: 1
16.08.2013, 22:06     Символ новой строки #41
strcat тут не подойдет. Скорее подойдет strncpy.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
vodilawofer
29 / 27 / 2
Регистрация: 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 и писать). либо вставлял в конец
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
16.08.2013, 22:14     Символ новой строки #43
Цитата Сообщение от vodilawofer Посмотреть сообщение
вставляешь строку в файл он либо затирал символы(эффект, если нажать insert и писать). либо вставлял в конец
Мой код? А как же скрины? Где там что затёрто? Покажите как вставляете. И почему вставляете? Насколько я понял, задача - поменять местами строки в файле?
castaway
Эксперт С++
4844 / 2983 / 367
Регистрация: 10.11.2010
Сообщений: 11,016
Записей в блоге: 10
Завершенные тесты: 1
16.08.2013, 22:18     Символ новой строки #44
vodilawofer, мой тебе совет: если возникают проблемы с тем что тебе посоветовали, и ты не можешь их решить, выкладывай код и прикрепляй к нему скриншот с показанием проблемы/логи с ошибками - помощь от форумчан последует намного быстрее.
vodilawofer
29 / 27 / 2
Регистрация: 27.09.2012
Сообщений: 123
16.08.2013, 22:22  [ТС]     Символ новой строки #45
изза разности длин строк нужно будет двигать часть, которая находиться между ними, в ту или иную сторону.

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

Не по теме:

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



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

Не по теме:


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



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

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

Не по теме:

Извиняюсь.


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

Добавлено через 1 минуту
Цитата Сообщение от vodilawofer Посмотреть сообщение
память
И где столько возьмёте? castaway, вы что-то мне насчёт вектора говорили?
castaway
Эксперт С++
4844 / 2983 / 367
Регистрация: 10.11.2010
Сообщений: 11,016
Записей в блоге: 10
Завершенные тесты: 1
16.08.2013, 22:45     Символ новой строки #54
alsav22, мы же остановились на MapViewOfFile ! ТС это устраивает.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
16.08.2013, 22:46     Символ новой строки #55
Цитата Сообщение от castaway Посмотреть сообщение
Нет, память понадобится только для тех данных, которые мы прочитаем, и в последствии будем записывать.
То есть? Поконкретнее можно?
vodilawofer
29 / 27 / 2
Регистрация: 27.09.2012
Сообщений: 123
16.08.2013, 22:47  [ТС]     Символ новой строки #56
Главное чтобы быстро операции происходили.
castaway
Эксперт С++
4844 / 2983 / 367
Регистрация: 10.11.2010
Сообщений: 11,016
Записей в блоге: 10
Завершенные тесты: 1
16.08.2013, 22:47     Символ новой строки #57
Цитата Сообщение от alsav22 Посмотреть сообщение
castaway, вы что-то мне насчёт вектора говорили?
Да, я говорил вам на счет вектора в 27-м посте ( Символ новой строки )
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
16.08.2013, 22:48     Символ новой строки #58
Цитата Сообщение от castaway Посмотреть сообщение
ТС это устраивает.
Устроит или нет будет видно, когда сделает (если сделает). Пока это только благие намерения. Я не настаиваю на своём варианте, но мне кажется, что по ресурсам это менее затратно.
castaway
Эксперт С++
4844 / 2983 / 367
Регистрация: 10.11.2010
Сообщений: 11,016
Записей в блоге: 10
Завершенные тесты: 1
16.08.2013, 22:49     Символ новой строки #59
Цитата Сообщение от alsav22 Посмотреть сообщение
То есть? Поконкретнее можно?
Повторюсь еще раз. MapViewOfFile ТС устраивает. Или вы о чем?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.08.2013, 22:52     Символ новой строки
Еще ссылки по теме:

Вывести строки, в которых символ «*» встречается не менее 2 раз и заменить символ «*» на символ «_» C++
Std::cin, символ новой строки C++
C++ Будет ли добавлен символ новой строки при ошибочном вводе?

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

Или воспользуйтесь поиском по форуму:
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
16.08.2013, 22:52     Символ новой строки #60
Цитата Сообщение от castaway Посмотреть сообщение
Да, я говорил вам на счет вектора в 27-м посте
Вопрос в количестве памяти, что не хватит, чтобы с таким файлом в памяти работать. Я правильно понял, насчёт вектора?

Добавлено через 1 минуту
Цитата Сообщение от castaway Посмотреть сообщение
Или вы о чем?
Я о том, какое количество данных вы предполагаете в память писать? Сколько?
Yandex
Объявления
16.08.2013, 22:52     Символ новой строки
Ответ Создать тему
Опции темы

Текущее время: 01:29. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru