Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
Werewolf_RU
9 / 9 / 7
Регистрация: 03.02.2014
Сообщений: 205
Завершенные тесты: 1
1

Ofstream дублирует бэк-слеш

18.04.2014, 20:35. Просмотров 834. Ответов 26
Метки нет (Все метки)

Здравствуйте, столкнулся с проблемой, что при чтении из файла путём использования потока ofstream у меня дублируются все находящиеся в файле бэк-слэши.
Для того чтобы не изобретать с вашей помощью новое колесо сразу скажу, что мне необходимо чтобы из файла скопировался символ переноса строки \n. Как это можно сделать?
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.04.2014, 20:35
Ответы с готовыми решениями:

Драйвер виртуального монитора | Скринкаст из (бэк|график|фрейм)буфера
Собственно, пишу я... Свой велосипед - быстрый VNC-подобный (концептуально)...

Используя рекурсивный бэк трэкинг сгенерировать все перестановки заданного числа
Используя рекурсивный бэк трэкинг сгенерировать все перестановки заданного...

Сортировка дублирует последний элемент
// одномерный массивы.cpp: определяет точку входа для консольного приложения....

Слеш и hInternet
Вообщем есть такой код int main(int argc, char* argv) { setlocale(LC_CTYPE,...

Заменить обратный слеш на обычный
К примеру, у нас есть ссылка:...

26
nmcf
6514 / 5743 / 2617
Регистрация: 14.04.2014
Сообщений: 24,494
18.04.2014, 20:39 2
Где они задублировались? И текст программы представь.
0
Werewolf_RU
9 / 9 / 7
Регистрация: 03.02.2014
Сообщений: 205
Завершенные тесты: 1
18.04.2014, 20:43  [ТС] 3
C++
1
2
3
4
5
6
7
8
ifstream input;
input.open("c:\\input.txt");
char buf[100];
while(!input.eof())
        {
            input>>buf;
            strcat(test, buf);strcat(test, " ");
        }
Если в файле попадается символ '\', то он копируется в буфер как "\\"
Собственно, изначально подозревал, что при попытке считать из файла '\n' он считает его просто как 2 отдельных символа слеша и буквы, но так как не нашёл иного варианта решил попробовать.
0
alsav22
5445 / 4840 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
18.04.2014, 20:44 4
Цитата Сообщение от Werewolf_RU Посмотреть сообщение
что при чтении из файла путём использования потока ofstream
ofstream - это для записи, а не для чтения.
0
Werewolf_RU
9 / 9 / 7
Регистрация: 03.02.2014
Сообщений: 205
Завершенные тесты: 1
18.04.2014, 20:46  [ТС] 5
Цитата Сообщение от alsav22 Посмотреть сообщение
ofstream - это для записи, а не для чтения
Задумался при написании темы, каюсь. В коде такого косяка нет.
0
alsav22
5445 / 4840 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
18.04.2014, 20:47 6
Записываете в файл откуда и как?
0
Werewolf_RU
9 / 9 / 7
Регистрация: 03.02.2014
Сообщений: 205
Завершенные тесты: 1
18.04.2014, 20:51  [ТС] 7
Цитата Сообщение от alsav22 Посмотреть сообщение
Записываете в файл откуда и как?
Цель в том, чтобы можно было открывать текстовый файл, в который что-то записано из другого текстового редактора. А при такой записи у нас символы \ и n действительно запишутся как 2 разных. Так что вопрос в том, как можно в обычном текстовом редакторе обозначить символ переноса строки.
0
nmcf
6514 / 5743 / 2617
Регистрация: 14.04.2014
Сообщений: 24,494
18.04.2014, 20:56 8
Если тебе надо читать всё как есть включая спецсимволы, открывай файл как бинарный.
0
Werewolf_RU
9 / 9 / 7
Регистрация: 03.02.2014
Сообщений: 205
Завершенные тесты: 1
18.04.2014, 20:59  [ТС] 9
Цитата Сообщение от nmcf Посмотреть сообщение
открывай файл как двоичный
C++
1
2
3
4
5
6
7
8
ifstream input;
        input.open("c:\\input.txt", ios::binary);
        char buf[100];
        while(!input.eof())
        {
            input>>buf;
            strcat(SendR, buf);strcat(SendR, " ");
        }
В таком случае та же история. В один символ записывается \\ в другой n.
0
alsav22
5445 / 4840 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
18.04.2014, 21:00 10
Цитата Сообщение от Werewolf_RU Посмотреть сообщение
у нас символы \ и n действительно запишутся как 2 разных
Они и есть разные.
Цитата Сообщение от Werewolf_RU Посмотреть сообщение
Так что вопрос в том, как можно в обычном текстовом редакторе обозначить символ переноса строки.
Не нужно его обозначать, он и так там есть (при нажатии Enter ставится), только не имеет графического отображения.
0
nmcf
6514 / 5743 / 2617
Регистрация: 14.04.2014
Сообщений: 24,494
18.04.2014, 21:01 11
Они не разные, \n - один символ (байт). Он, наверное, в отладчике смотрит.
Автор, ты как смотришь, что прочитано? Через отладчик?
0
alsav22
5445 / 4840 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
18.04.2014, 21:03 12
Цитата Сообщение от Werewolf_RU Посмотреть сообщение
В таком случае та же история. В один символ записывается \\ в другой n.
В какой один символ? Файл покажите.

Добавлено через 1 минуту
Цитата Сообщение от nmcf Посмотреть сообщение
Они не разные
'\n' - код 10. '\' - код 47.
0
Werewolf_RU
9 / 9 / 7
Регистрация: 03.02.2014
Сообщений: 205
Завершенные тесты: 1
18.04.2014, 21:03  [ТС] 13
Цитата Сообщение от alsav22 Посмотреть сообщение
принажатии Enter ставится
Пробовал. Если он там и ставится при нажатии enter, то поток его игнорирует(а верней останавливается на нём) как и на любом другом разделителе строк - пробелы, табуляции и т.п. Потому я и загружаю всё в цикле. Если есть способ "вытащить" файл целиком так, чтобы поток считал разделители чем-то обычным, прошу мне о нём рассказать)
0
alsav22
5445 / 4840 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
18.04.2014, 21:04 14
Цитата Сообщение от nmcf Посмотреть сообщение
Он, наверное, в отладчике смотрит.
Сейчас разберёмся.
0
nmcf
6514 / 5743 / 2617
Регистрация: 14.04.2014
Сообщений: 24,494
18.04.2014, 21:04 15
В текстовом файле "новая строка" - один символ, это представление строки в C++ нотации будет с двумя.
0
alsav22
5445 / 4840 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
18.04.2014, 21:05 16
Цитата Сообщение от Werewolf_RU Посмотреть сообщение
то поток его игнорирует(а верней останавливается на нём) как и на любом другом разделителе строк - пробелы, табуляции и т.п.
Написали уже:
Цитата Сообщение от nmcf Посмотреть сообщение
Если тебе надо читать всё как есть включая спецсимволы, открывай файл как бинарный.
0
nmcf
6514 / 5743 / 2617
Регистрация: 14.04.2014
Сообщений: 24,494
18.04.2014, 21:07 17
Лучший ответ Сообщение было отмечено Werewolf_RU как решение

Решение

В режиме binary должен всё читать. Только надо read() использовать для этого.
1
Werewolf_RU
9 / 9 / 7
Регистрация: 03.02.2014
Сообщений: 205
Завершенные тесты: 1
18.04.2014, 21:08  [ТС] 18
Цитата Сообщение от nmcf Посмотреть сообщение
Автор, ты как смотришь, что прочитано? Через отладчик?
Да, просматриваю через отладчик. Т.к. записываю в массив, то там это хорошо видно, в одной ячейке лежат слеши, в другой буква.
Цитата Сообщение от alsav22 Посмотреть сообщение
В какой один символ? Файл покажите.
Прилагаю скриншот содержимого файла и того, что мне пишет отладчик, для полной ясности.
0
Миниатюры
Ofstream дублирует бэк-слеш  
nmcf
6514 / 5743 / 2617
Регистрация: 14.04.2014
Сообщений: 24,494
18.04.2014, 21:10 19
Отладчик будет переводить в такое представление, потому что другого способа представить спецсимволы нет.
0
alsav22
5445 / 4840 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
18.04.2014, 21:11 20
Цитата Сообщение от nmcf Посмотреть сообщение
В режиме binary должен всё читать. Только надо read() использовать для этого.
Можно еще посимвольное чтение использовать, или fgets(), она считывает '\n' из файла. Т.е., вариантов масса.
1
18.04.2014, 21:11
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.04.2014, 21:11

Удвоенный двойной слеш в wstring
Здравствуйте. Делаю так: std::wstring s = argv ; s += L" "; s += argv; ...

std::string и двойной слеш
Вопрос достаточно прост в примитивной программе: #include <iostream> #include...

ofstream
доброго времени суток! Возникла такая проблема: У меня программа должна...


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

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

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