Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > C++ > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 18.12.2012, 16:06   #1
julia9311
Форумчанин
 
Регистрация: 23.06.2012
Сообщений: 69
Репутация: 10
По умолчанию Удаление из срр файла всего текста кроме комментариев

эта программа удаляет комментарии из текста, а как сделать так, чтобы наоборот, удалялся текст, а комментарии оставались?

Код:

#include <cstdio>
#include <cstring> 
int main()
{    
FILE *pfin = fopen("in.txt", "r"),         *pfout = fopen("out.txt", "w");     
if(pfin && pfout)    
{        
char buf[256],            *p = 0;         
for(; fgets(buf, sizeof(buf), pfin); )       
 {           
 if ( p = strstr(buf, "//") )            
{                
strcpy(p, "\n");           
 }            
 fputs(buf, pfout);        
}            
fclose(pfin);            
fclose(pfout);     
}    
else        
perror("fopen failed");
return 0;
}

julia9311 вне форума   Ответить с цитированием
Старый 18.12.2012, 16:27   #2
waleri
Профессионал
 
Регистрация: 13.07.2012
Адрес: Нижний Новгород
Сообщений: 5,536
Репутация: 1777
По умолчанию

Изменить условие в строке, где strstr, на обратное
waleri вне форума   Ответить с цитированием
Старый 18.12.2012, 16:30   #3
julia9311
Форумчанин
 
Регистрация: 23.06.2012
Сообщений: 69
Репутация: 10
По умолчанию

я понимаю, что нужно изменить условие, но как именно?
julia9311 вне форума   Ответить с цитированием
Старый 18.12.2012, 18:36   #4
Smogg
Профессионал
 
Регистрация: 14.06.2011
Сообщений: 1,157
Репутация: 354
По умолчанию

Код:

#include <cstdio>
#include <cstring> 
int main()
{    
	FILE *pfin = fopen("c:\\2\\in.txt", "r"),         *pfout = fopen("c:\\2\\out.txt", "w");     
	if(pfin && pfout)    
	{        
		char buf[256],buf1[256], *p = 0;         
		for(; fgets(buf, sizeof(buf), pfin); )       
		{        
			p = strstr(buf, "//");
			if ( p == nullptr )            
			{                
				           
				fputs("\n", pfout);        
			} 
			else fputs(p, pfout);        
		}            
		fclose(pfin);            
		fclose(pfout);     
	}    
	else        
		perror("fopen failed");
	return 0;
}

если "//" не найдено, то возвращается 0 и пишем пустую строку.
если "//" найдено, то пишем буфер, начиная с найденной позиции.
Smogg вне форума   Ответить с цитированием
Старый 18.12.2012, 18:51   #5
Granus
С++
Участник клуба
 
Аватар для Granus
 
Регистрация: 22.09.2008
Адрес: Санкт-Петербург
Сообщений: 791
Репутация: 115

skype: lisyarus
По умолчанию

Цитата:
Сообщение от julia9311
я понимаю, что нужно изменить условие, но как именно?
Цитата:
Сообщение от waleri
на обратное
чем-то нужно было заполнить сообщение
__________________
Форматируйте код, будьте людьми.
Granus вне форума   Ответить с цитированием
Старый 18.12.2012, 20:28   #6
waleri
Профессионал
 
Регистрация: 13.07.2012
Адрес: Нижний Новгород
Сообщений: 5,536
Репутация: 1777
По умолчанию

Кстати это не самый лучший способ удаления комментариев - что будет, если у нас будет "Some string with // inside"?
waleri вне форума   Ответить с цитированием
Старый 18.12.2012, 21:45   #7
Perchik71
С++, Delphi
Форумчанин
 
Аватар для Perchik71
 
Регистрация: 24.11.2012
Адрес: Москва
Сообщений: 495
Репутация: 67

skype: Perchik71
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
Кстати это не самый лучший способ удаления комментариев - что будет, если у нас будет "Some string with // inside"?
Код:

p = strstr(buf, "//")

она ищет подстроку в линии, если она есть p не равно -1 т.е. позиция в тексте от 0.
//-----
бррр перепутал с одной .. она адресс возвращает иначе NULL
__________________
Если помог, тут весы есть , Вам не сложно, а мне приятно.

Последний раз редактировалось Perchik71; 18.12.2012 в 21:47.
Perchik71 вне форума   Ответить с цитированием
Старый 18.12.2012, 22:00   #8
julia9311
Форумчанин
 
Регистрация: 23.06.2012
Сообщений: 69
Репутация: 10
По умолчанию

В принципе, наверное, можно обойтись без удаления, т.к. в общем то мне надо просто чтобы комментарии из файла записывались в один файл, а оставшийся текст - в другой.
julia9311 вне форума   Ответить с цитированием
Старый 18.12.2012, 22:10   #9
Perchik71
С++, Delphi
Форумчанин
 
Аватар для Perchik71
 
Регистрация: 24.11.2012
Адрес: Москва
Сообщений: 495
Репутация: 67

skype: Perchik71
По умолчанию

Цитата:
Сообщение от julia9311 Посмотреть сообщение
В принципе, наверное, можно обойтись без удаления, т.к. в общем то мне надо просто чтобы комментарии из файла записывались в один файл, а оставшийся текст - в другой.
да вы можете так и поступить....
но не проще загрузить файл в память в виде строки.
и работать с памятью.... это и быстрее и удобнее..
так же учтите одну вещь...
загрузив из памяти....
берите новую строку длиной до '\n' или '\r' или '\0'.
так ваш алгоритм не ограничен и надёжно отработает с любой длины строк.
//-------------
к тому же прошу учесть второй тип комментариев "/*" и "*/".
__________________
Если помог, тут весы есть , Вам не сложно, а мне приятно.

Последний раз редактировалось Perchik71; 18.12.2012 в 22:13.
Perchik71 вне форума   Ответить с цитированием
Старый 18.12.2012, 22:16   #10
Smogg
Профессионал
 
Регистрация: 14.06.2011
Сообщений: 1,157
Репутация: 354
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
Кстати это не самый лучший способ удаления комментариев
Ну, да, еще не факт, что все строки короче 256.
И не факт, что нет комментариев /* */.

Цитата:
Сообщение от waleri Посмотреть сообщение
что будет, если у нас будет "Some string with // inside"?
Код:

if ( p == nullptr )            
{                
	           
	fputs("\n", pfout);        
} 
else fputs(p, pfout); //именно по этому пишется p, а не buf

Smogg вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление комментариев Павел_95 Общие вопросы C/C++ 8 06.11.2012 22:09
Удаление всего кроме формул Severny Microsoft Office Excel 21 13.07.2011 12:22
[C#] Удаление блочных комментариев AquaticSoul C# (си шарп) 7 10.11.2010 22:01


18:25.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru