Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - [решено] Редактирование txt файла

Ответить
Настройки темы
C/C++ - [решено] Редактирование txt файла

Пользователь


Сообщения: 64
Благодарности: 5

Профиль | Отправить PM | Цитировать


Искал на просторах форума подобные темы, нашёл несколько, но так и не смог решить проблемы, поэтому задам вопрос конкретно для своего примера.
Программирую на Builder C++ 6, точнее учусь сейчас.

Задача такова: есть файл test.txt, в нём всякий текст, комментарии, и слова в скобках [].
Фрагмента из txt:
Код: Выделить весь код
[outfit_base]
; delete full_scale_icon	next update- obsolete, use  full_icon_name instead !!!
; [old_base] устаревшее значение
;{ парамметры необходимые
    для нормальной работы
    в базовом режиме [base] }

additional_inventory_weight		= 0		; +max_walk_weight
additional_inventory_weight2	= 0		;	+40 kg
full_icon_name					= npc_icon_without_outfit
При обработке комментарии не учитывать
Как видите комментарий идёт после ";" и внутри фигурных скобок ;{ тута } (причём первая фигурная скобка со знаком ";").
Нужно вывести в отдельный exit.txt файл всё что находится в квадратных скобка [], повторюсь: при обработке комментарии не учитывать, то есть [old_base], [base] и прочее не выводить.

Заранее спасибо !

Отправлено: 20:28, 26-11-2011

 

Аватара для lxa85

Необычный


Contributor


Сообщения: 4466
Благодарности: 995

Профиль | Сайт | Отправить PM | Цитировать


Starter1, И в чем проблема?
Рассмотрите варианты расстановки комментариев, определите логические условия определяющие начало и конец комментария. Точно также сделайте для слов в квадратных скобках.
Анализируйте текст с заданными условиями. Делов то.

-------
- Я не разрешаю тебе быть плохой! Потому что плохие люди совершают плохие поступки. А это нехорошо!
(Из наставлений 5 летней девочки своей младшей сестре)

Это сообщение посчитали полезным следующие участники:

Отправлено: 20:56, 26-11-2011 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Пользователь


Сообщения: 64
Благодарности: 5

Профиль | Отправить PM | Цитировать


lxa85,
Цитата:
Делов то.
Алгоритм для меня не вопрос, такую программу я сделал на cmd. Но мне нужен хотя бы один рабочий образец чтобы делать программы на C++.

Отправлено: 22:30, 26-11-2011 | #3


Аватара для Drongo

Будем жить, Маэстро...


Сообщения: 6694
Благодарности: 1393

Профиль | Сайт | Отправить PM | Цитировать


Так пойдёт?
Код: Выделить весь код
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   for(int i = 0; i < Memo1->Lines->Count; i++){
      if(Memo1->Lines->Strings[i].Pos(";") )
         if(Memo1->Lines->Strings[i].Pos(";") == 1)
            continue; //Memo2->Lines->Add(Memo1->Lines->Strings[i]);
         else
            Memo2->Lines->Add(Memo1->Lines->Strings[i].SubString(1, Memo1->Lines->Strings[i].Pos(";")-1));
    }
}

-------
Правильная постановка вопроса свидетельствует о некотором знакомстве с делом.
3нание бывает двух видов. Мы сами знаем предмет — или же знаем, где найти о нём сведения.
[Quick Killer 3.0 Final [OSZone.net]] | [Quick Killer 3.0 Final [SafeZone.cc]] | [Парсер логов Gmer] | [Парсер логов AVZ]

http://tools.oszone.net/Drongo/Userbar/SafeZone_cc.gif

Это сообщение посчитали полезным следующие участники:

Отправлено: 02:22, 27-11-2011 | #4


Пользователь


Сообщения: 64
Благодарности: 5

Профиль | Отправить PM | Цитировать


Drongo, Попробовал, странный вывод. Выводит не все строки, даже те в которых нет ";".
Немного переделал:
Код: Выделить весь код
   TStringList *lst = new TStringList;
   TStringList *lstReplace = new TStringList;
   String str = ";";
   String tempStr;
   lst->LoadFromFile(ExtractFilePath(Application->ExeName) + "test.ltx");

        for(int j = 0; j < lst->Count; j++){
                if(lst->Strings[j].Pos(str)){
                lstReplace->Add(lst->Strings[j].SubString(1, lst->Strings[j].Pos(str)-1));
                }
                else lstReplace->Add(lst->Strings[j]);
        }
lstReplace->SaveToFile(ExtractFilePath(Application->ExeName) + "Test.txt");
delete lst;
delete lstReplace;
Close();
Замечательно, комментарии удаляет но остаются пустые строки. Теперь буду продолжать дальше ! Спасибо.

Последний раз редактировалось Starter1, 27-11-2011 в 11:19. Причина: Переделал код


Отправлено: 11:12, 27-11-2011 | #5


Аватара для Drongo

Будем жить, Маэстро...


Сообщения: 6694
Благодарности: 1393

Профиль | Сайт | Отправить PM | Цитировать


Starter1, Я проверил на тексте, пример которого вы привели, там отработал, выводит только строки в которых нет ; или строку до ;

-------
Правильная постановка вопроса свидетельствует о некотором знакомстве с делом.
3нание бывает двух видов. Мы сами знаем предмет — или же знаем, где найти о нём сведения.
[Quick Killer 3.0 Final [OSZone.net]] | [Quick Killer 3.0 Final [SafeZone.cc]] | [Парсер логов Gmer] | [Парсер логов AVZ]

http://tools.oszone.net/Drongo/Userbar/SafeZone_cc.gif


Отправлено: 14:41, 27-11-2011 | #6


Пользователь


Сообщения: 64
Благодарности: 5

Профиль | Отправить PM | Цитировать


Drongo, Наверное ошибка из-за того что я не использую Memo а использую List для вывода в файл. Ещё такой вопрос. Я так понял (1, lst->Strings[j].Pos(str)-1)) это обработка строки, 1 и -1 это отступы от краев, 1 сначала а -1 с того места где стоит ";", то есть с Pos(str). Можно ли сделать подобное только от ";" и до конца то есть оставлять сам комментарий?

Отправлено: 15:11, 27-11-2011 | #7


Аватара для Drongo

Будем жить, Маэстро...


Сообщения: 6694
Благодарности: 1393

Профиль | Сайт | Отправить PM | Цитировать


Цитата Starter1:
Drongo, Наверное ошибка из-за того что я не использую Memo а использую List для вывода в файл »
Да принципиальной разницы нет.
Цитата Starter1:
Можно ли сделать подобное только от ";" и до конца то есть оставлять сам комментарий? »
Код: Выделить весь код
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   for(int i = 0; i < Memo1->Lines->Count; i++)
      if(Memo1->Lines->Strings[i].Pos(";") )
         Memo2->Lines->Add(Memo1->Lines->Strings[i].SubString(Memo1->Lines->Strings[i].Pos(";")+1, Memo1->Lines->Strings[i].Length()));
}

-------
Правильная постановка вопроса свидетельствует о некотором знакомстве с делом.
3нание бывает двух видов. Мы сами знаем предмет — или же знаем, где найти о нём сведения.
[Quick Killer 3.0 Final [OSZone.net]] | [Quick Killer 3.0 Final [SafeZone.cc]] | [Парсер логов Gmer] | [Парсер логов AVZ]

http://tools.oszone.net/Drongo/Userbar/SafeZone_cc.gif

Это сообщение посчитали полезным следующие участники:

Отправлено: 17:46, 27-11-2011 | #8



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - [решено] Редактирование txt файла

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] Редактирование txt в GUI koc9kaca AutoIt 3 05-07-2011 22:53
CMD/BAT - [решено] Созд.*.txt по имени файла, с перемещением *.txt и файла в папку с именем файла. OSArev Скриптовые языки администрирования Windows 2 30-01-2011 11:58
Разное - редактирование SchedLgU.txt vovnet Хочу все знать 0 02-02-2010 00:36
[решено] редактирование файла .:TimoXa:. AutoIt 4 27-03-2009 08:29
Редактирование EXE файла FoxPro Giorgievich Программирование и базы данных 7 21-08-2004 22:48




 
Переход