Компьютерный форум NoWa.cc

Компьютерный форум NoWa.cc (https://nowa.cc/index.php)
-   Visual C++ / С/C++ (https://nowa.cc/forumdisplay.php?f=302)
-   -   Помогите написать парсер для текстового документа!!! (https://nowa.cc/showthread.php?t=117813)

Diy666 31.08.2007 08:25

Помогите написать парсер для текстового документа!!!
 
Нужно написать парсер, который открывает текстовый файл, считывает побайтно содержимое и если в тесте попадается знак $ переводит на новую строку т.е.
____________
привет$$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; //уходим
}

}
___________________________

Я пока начинающий! Подскажите если кто знает пожалуйста!

zss 01.09.2007 16:52

Ответ: Помогите написать парсер для текстового документа!!!
 
Для этой задачи достаточно прочитать весь текст в буфер, а потом все знаки $ заменить на \n$ (естественно каждый раз сдвигая остальной текст на 1 символ). Если знаком $ можно пожертвовать, то просто меняем его на \n

novak 18.11.2007 05:01

Ответ: Помогите написать парсер для текстового документа!!!
 
Пример некорректный.

В ответ на "привет$$089Пока"
должны получить:
=================
привет
$
$089Пока
=================

А вообще, такие проблемы просто решаются скриптовыми языками:

Python: s=s.replace('$', '\n$')

skippy 23.12.2007 07:59

Ответ: Помогите написать парсер для текстового документа!!!
 
Для данного конкретного случая - то, что сказал ZSS, но с некоторой поправкой - не надо ничего сдвигать, просто буфер сканируется, и посимвольно пишется в результирующий файл, если встречается символ '$', то в файл пишется дополнительный '\n'. Поскольку текст уже в буфере, то писать можно в исходный файл (хотя более правильно писать во временный файл, а потом его переименовать, это исключает потерю данных при сбое во время записи).
Для более сложного случая использовать сканер - lex / flex (это классика).
Для парсинга вообще lex+yacc (классика) либо средства библиотеки boost.


Текущее время: 14:19. Часовой пояс GMT +3.

Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2026, vBulletin Solutions, Inc. Перевод: zCarot
Copyright ©2004 - 2025 NoWa.cc

Время генерации страницы 0.01923 секунды с 9 запросами