![]() |
|
| Правила Форума редакция от 22.06.2020 |
|
|||||||
|
|
Окажите посильную поддержку, мы очень надеемся на вас. Реквизиты для переводов ниже. |
|
![]() |
|
|
Опции темы | Опции просмотра |
Language
|
|
|
#1
|
|
Неактивный пользователь
Регистрация: 30.08.2007
Сообщений: 2
Репутация: 0
|
Нужно написать парсер, который открывает текстовый файл, считывает побайтно содержимое и если в тесте попадается знак $ переводит на новую строку т.е.
____________ привет$$089Пока //Исходная строка привет //Должны получить $$089Пока ____________ void CParserDlg::OnBnClickedButton1() { // TODO: Add your control notification handler code here CFileDialog dlg(TRUE,"txt", "*.txt"); if (dlg.DoModal()==IDOK) { CFile myFile; VERIFY(myFile.Open(dlg.GetPathName(), CFile::modeReadWrite)); char buffer[1024]={0}; //буфер куда читаем } } int counter=0; //счетчик для побайтового смещения при поиске //строки откуда начинать читать значения myFile.Seek(0,CFile::begin); //стали в начало файла do //Ищем откуда начать чтение данных { try { myFile.Seek(counter++,CFile::begin); //Пробуем переместиться в файле } catch (...) { //не получилось переместиться - ругаемся myFile.Close(); MessageBox("Стартовая строка не найдена"); return; } //чистим буфер для чтения из файла memset(buffer,0,sizeof(buffer)); if (myFile.Read(buffer,strlen(0))==0) {//если ничего не смогли прочитать myFile.Close(); MessageBox("Файл битый"); return; //уходим } } ___________________________ Я пока начинающий! Подскажите если кто знает пожалуйста! |
|
|
|
| Реклама: |
|
|
#2
|
|
Постоялец
![]() ![]() ![]() ![]() ![]() Пол:
Регистрация: 05.02.2007
Адрес: Москва
Сообщений: 662
Репутация: 271
|
Для этой задачи достаточно прочитать весь текст в буфер, а потом все знаки $ заменить на \n$ (естественно каждый раз сдвигая остальной текст на 1 символ). Если знаком $ можно пожертвовать, то просто меняем его на \n
__________________
Сергей Сергеевич |
|
|
|
|
|
#3
|
|
Неактивный пользователь
Регистрация: 18.11.2007
Сообщений: 5
Репутация: 0
|
Пример некорректный.
В ответ на "привет$$089Пока" должны получить: ================= привет $ $089Пока ================= А вообще, такие проблемы просто решаются скриптовыми языками: Python: s=s.replace('$', '\n$') |
|
|
|
|
|
#4
|
|
Неактивный пользователь
Регистрация: 23.12.2007
Сообщений: 5
Репутация: 1
|
Для данного конкретного случая - то, что сказал ZSS, но с некоторой поправкой - не надо ничего сдвигать, просто буфер сканируется, и посимвольно пишется в результирующий файл, если встречается символ '$', то в файл пишется дополнительный '\n'. Поскольку текст уже в буфере, то писать можно в исходный файл (хотя более правильно писать во временный файл, а потом его переименовать, это исключает потерю данных при сбое во время записи).
Для более сложного случая использовать сканер - lex / flex (это классика). Для парсинга вообще lex+yacc (классика) либо средства библиотеки boost. Последний раз редактировалось skippy; 23.12.2007 в 08:04.. |
|
|
|
![]() |
Похожие темы
|
||||
| Тема | Автор | Раздел | Ответов | Последнее сообщение |
| Помогите написать bat-ник-пинговщик | Coldblooded | Моделирование программ | 4 | 15.07.2011 20:50 |
| помогите написать программу | Verysilent | Visual C++ / С/C++ | 3 | 24.11.2009 16:47 |
| ПОМОГИТЕ написать программу!!! | Rinaserga | Visual C++ / С/C++ | 1 | 01.11.2009 09:17 |
| Помогите мне написать программу на C++ | Germana | Visual C++ / С/C++ | 3 | 08.12.2008 05:52 |
|
|