Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Удаление части текста из файла 
:(
    Опции темы
Egeni
Дата 22.6.2010, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 21.5.2010

Репутация: нет
Всего: нет



а как удалить от начала <script* до </script> из текстового файла?
тоесть * неограниченное количество текста?


Модератор: для своих вопросов следует создавать отдельные темы

Это сообщение отредактировал(а) bsa - 22.6.2010, 14:18
PM MAIL   Вверх
jonie
Дата 22.6.2010, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 6
Всего: 118



читайте до <script* в новый файл, пропускаете (читая опять же) до </script> и дописывайте все что осталось. Просто так "из середены" ничего удалить неудастся.


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Egeni
Дата 22.6.2010, 21:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 21.5.2010

Репутация: нет
Всего: нет



Код

#include <stdafx.h>             //Подключение необходимых библиотек
#include <stdio.h>
#include <io.h>
#include <windows.h>  
#include <direct.h> 
#include <conio.h>
#include <malloc.h>
 
#define MASK "*.htm"    //Маска поиска файлов
#define ESC 27                  //Код клавиши Esc для выхода из программы       
#define NOFFILES 10             //Количество добавляемых элементов в ДМУ списка файлов
 
 
struct term_struct{             //Структура терминов (<b></b>)
        char word[255];         //Термин
        char *file_name;        //Имя файла     
        int free;                       //Идентификатор свободности элемента в структуре терминов
};
 
 
 
 
 
int time;                               //Глобальная переменная для определения время выполнения обработки файлов
 
 
int term(term_struct T[], char *fname, char *in, int str_id){
                                                //Функция определения терминов и их записи в структуру
        int i,j=0,k,n=-1;                                       
        char out[255];
        for(n=-1;T[n+1].free==1;n++);
                                                //Поиск свободного элемента структуры
        for(i=0; i<=strlen(in); i++){
                                                //Просмотр входной строки
                if(!str_id){    //В предидущем вызове строка закончилась
                        if(in[i]=='<'&& (in[i+1]=='b'||in[i+1]=='B')&&(in[i+2]==' '||in[i+2]=='>')){
                                                //Если нашелся открывающий тег(и его открывающая скобка <)
                                j=0;
                                n++;    //Переход на свободный элемент структуры
                                for(j=i;in[j]!='>';j++)if(j>=strlen(in)-1)break;
                                                //Пропуск тега (для случая <b ...>)
                                i=j+1;
                                for(j=i,k=0;in[j]!='<'&&in[j+1]!='/'&&(in[j+1]!='b'||in[j+1]!='B');k++,j++){
                                                //Пока не найден закрывающий тег
                                        if(in[j]=='<'&&in[j+1]!='/'){
                                                //Пропуск тегов внутри термина
                                                while(j<=strlen(in)-1||in[j]!='>')j++;
                                        }
                                        if(j>=strlen(in)-1){
                                                //Если конец строки: запомнить для следующего вызова
                                                str_id=1; 
                                                break;
                                        }
                                        out[k]=in[j];
                                                //Переписывание в выходную строку
                                }
                                out[k]='\0';
                                if(strlen(out)!=0){
                                                //Если термин не пустое слово
                                                strcpy(T[n].word,out);
                                                //Запись в структуру
                                                T[n].free=1;
                                                //Изменение идентификатора заполненности элемента структуры
                                                T[n].file_name=fname;
                                                //Запись имени файла
                                                i=j;
                                }
                        }
                }else{                  //Если в предидущем вызове строка не закончилась
                        str_id=0;       
                        for(j=i,k=0;in[j]!='<';k++,j++){ 
                                                //Ищем закрывающий тег
                                        if(j>=strlen(in)){str_id=1; break;}
                                                //Если строка закончилась, а тег не закрылся - запомнить
                                        out[k]=in[j];
                                                //Переписывание в выходную строку
                                }
                                out[k]='\0';
                                strcat(T[n].word,out);
                                                //Добавить к теущему термину продолжение
                }
                        
        }
        return str_id;          
}
 
 
int read_file(term_struct T[],char *fname){
                                                //Функция чтения файла          
        FILE *fd;
        char str[255];
        int i,body_id=0,str_id=0;       
                                                //Идентификаторы: тега <body>, конца термина
        fd=fopen(fname,"r");//Открыть файл
        if(fd==NULL)return 0;
        while(fgets(str,255,fd)!=NULL){
                                                //Построчное чтение
                if(str==NULL)return 0;
                if(body_id==0)
                        for(i=0;i<strlen(str);i++)
                                if(str[i]=='<'&&(str[i+1]=='b'||str[i+1]=='B')&&(str[i+2]=='o'||str[i+2]=='O')&&(str[i+3]=='d'||str[i+3]=='D')&&(str[i+4]=='y'||str[i+4]=='Y'))
                                                //Пропускать строки, пока не встретится тег <body> - начало HTML документа
                                body_id=1;
                if(body_id)str_id=term(T,fname,str,str_id);
        }                                       //Вызвать функцию записи терминов в структуру
        fclose(fd);
        return 1;
}
 
void write_file(term_struct T[]){
                                                //Запись терминов в выходной  файл
        FILE *fd;
        int i,j;
        fd=fopen("output.htm","w");
                                                //Открыть файл
        fprintf(fd,"<html><head><title>Курсовая работа по информатике</title></b><BODY>\n");
        fprintf(fd,"<p><font face=\"Comic Sans MS Black\"><span style=\"font-size:18pt;\"><b>Термины</b></span></font></p>");
                                                //Запись в файл 
        for(i=0;T[i].free==1;i++)
                fprintf(fd,"<p><b><A href=\"file://localhost/%s\">%d. %s</a><br>(%s)</b></p>\n", T[i].file_name, i+1, T[i].word, T[i].file_name);
                                                //Запись терминов из структуры
        time=GetTickCount()-time;
        fprintf(fd,"Время выполнения: %d мс",time);
                                                //Время выполнения
        fprintf(fd,"</BODY></html>");
        fprintf(fd,"\n");
        
        fprintf(fd,"\n");
        fclose(fd);
}
                
 
 
 
char **find_files(char dirname[]){
                                                //Поиск файлов в заданном каталоге в ДМУ
        int i;
        char **pp=new char*[NOFFILES];
        char path[255];
        char tmp_path[255];
 
 
        strcpy(path,dirname);
        strcpy(tmp_path,dirname);
        strcat(path, MASK);     //По заданной маске
 
 
 
        _finddata_t *fileinfo=new _finddata_t;
                                                //Переменная для поиска типа _finddata_t
        long done = _findfirst(path,fileinfo);
        int MayWeWork = done;
 
 
        for (i=0;MayWeWork!=-1;i++){  
                                                //Пока есть файлы, записать в ДМУ
                pp[i] = new char [strlen(fileinfo->name)+1];
                if (pp[i]==NULL) return NULL;
                
                strcat(tmp_path,fileinfo->name);
                strcpy(pp[i],tmp_path);
                strcpy(tmp_path,dirname);
 
                if ((i+1) % NOFFILES ==0) {
                                                //Расширить при переполнении
                        pp = (char**) realloc( (void*) pp,sizeof(char *) *(i+1+NOFFILES));
                        if (pp ==NULL) return NULL;
                }
                
 
                MayWeWork = _findnext(done, fileinfo); 
                chdir(path);
        }
        _findclose(done);
        delete fileinfo;
        pp[i] = NULL;
        return pp;
}
 
 
 
void main(){
 
        int i;
        int n=0;
        term_struct *T=new term_struct[40000];
                                                //Структура с терминами
        char **A=new char*[];
                                                //ДМУ с именами найденых файлов
        char path[255];
        printf("Input a path to html files...\n");
        scanf("%s",&path);
                                                //Ввести путь к HTML файлам
        time=GetTickCount();//Запуск таймера выполнения программы
        if(path[strlen(path)]!='\\')
                                                //Если путь не содержит в конце "\", добавить
                strcat(path,"\\");
        A=find_files(path);     //Найти файлы
        for(i=0;A[i]!=NULL;i++)n=read_file(T,A[i]);
                                                //Прочитать файл и записать термины в структуру
        if(n){                          //Если удалось, вывести результат
                write_file(T);  //Записать термины в выходной файл
                printf("\nComplite in %d ms.\nFiles: %d\n\nPress ESC for exit.",time,i);
        }else{                          //Если нет, вывести сообщение
                printf("Error. Files not found.\nPress ESC for exit.");
        }
        while((getch())!=ESC);
                                                //Ждать нажатия ESC
}



нашел похожий код но он не выполняется чтобы его попробывать
PM MAIL   Вверх
jonie
Дата 23.6.2010, 07:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 6
Всего: 118



Egeni, и что вы предлагаете нам?


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Alca
Дата 23.6.2010, 09:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 2
Всего: 50



Egeni, а STL не пробывал?


--------------------
PM WWW ICQ Skype Jabber   Вверх
Shaggie
Дата 23.6.2010, 09:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Завсегдатай
Сообщений: 570
Регистрация: 21.12.2006
Где: outer space

Репутация: нет
Всего: 72



Если это для продакшена, смотри Boost.Regex.


--------------------
Цитата(alina3000 @  6.3.2014,  10:47 Найти цитируемый пост)
Сорри что не по теме 
PM MAIL ICQ GTalk Jabber   Вверх
xvr
Дата 23.6.2010, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Цитата(Egeni @  22.6.2010,  21:55 Найти цитируемый пост)
нашел похожий код но он не выполняется чтобы его попробывать 

Ох, из каких помоек вы эти коды набираете?  smile 

Довелось мне работать с одним 'уникумом'. Он никак не мог что то в С запрограмировать, а ходил и приставал ко всем в лаборатории что бы ему объяснили, что и как (а лучше прямо написали).
Попытки ему что то объяснить (на словах) успехом не увенчались, в конце концов один сотрудник не выдержал, и прислал ему e-mail'ом кусок С текста, который нужно было вставить.
Так это чудо вырезало из письма С код, вместе с кусками текста с инструкциями что и куда вставить, и вставило  этот винегрет прямо куда то в центр С файла (и попало это куда то в середину функции).
Потом с матами от компилятора оно пошло жаловаться к автору письма, что тот ему дал неправильный код.

Объяснить ему, что оно не право, не удалось  smile 

PS. До сих пор удивляюсь, почему его не уволили еще в начале его 'проффесиональной' деятельности  smile 

PM MAIL   Вверх
EvilsInterrupt
Дата 24.6.2010, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Executables research
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 14.7.2007
Где: Железнодорожный, МО, Россия

Репутация: нет
Всего: 9



Egeni, ты бы стал анализить такую кучу кода? думаю нет. Даже если бы ты был ацким гуру, ты бы не стал,т.к. у тебя было бы дохера задач которые на тебя партия повесила. Почему ты ждешь, что такие здоровые куски кода, ктото будет смотреть? рекомендую или своди к минимально возможному, а если попросят, то тогда и приводи! ;)

>>а как удалить от начала <script* до </script> из текстового файла?
тоесть * неограниченное количество текста?

как уже верно заметили выше, ничего из файл удалить нельзя!!! Почему? Потому что на диске файл представляет собой область данных, возможно непрерывную, а возможно прерывающейся. т.к. файл это цепочка секторов сцепленная в кластер, если это NTFS. Так вот, это уже организованная последовательность данных и просто так взять ее и разрушить, к примеру убрать "не нужный" уже сектор или кластер не получится! Поэтому надо создавать новый и уже тогда писать в него все то, что должно попасть. Таким образом копируешь данные до начала тега <script> ищешь его конец </script> и потом до конца пока не !eof()

Вернее можно  разрушить ;))) некоторые "добросовестные" коды это делают, но это пока не для твоего  уровня развития. Да и гуру бы нестал заморачиваться, создал бы новый файл и записал чего надо ;) Зачем делать чтото сложно, когда это не оплачивается, а то что попроще не особо тормозит комп и также покупупается! ;)

Это сообщение отредактировал(а) EvilsInterrupt - 24.6.2010, 15:58
PM MAIL WWW ICQ Jabber   Вверх
Egeni
Дата 25.6.2010, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 21.5.2010

Репутация: нет
Всего: нет



Цитата

182: error: `main' must return `int'
In function `int main(...)':
188: error: expected primary-expression before ']' token


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

Это сообщение отредактировал(а) Egeni - 25.6.2010, 16:36
PM MAIL   Вверх
xvr
Дата 25.6.2010, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Цитата(Egeni @  25.6.2010,  16:35 Найти цитируемый пост)
что можно сделать чтобы маин был инт?
Прочесть книгу заклинаний (называется 'Язык С') и исполнить заклинание мэйна -
Код

int main()


PM MAIL   Вверх
Egeni
Дата 25.6.2010, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 21.5.2010

Репутация: нет
Всего: нет



пробовал я так писать, говорит дальше что ошибка в чар
PM MAIL   Вверх
wester
Дата 25.6.2010, 18:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 675
Регистрация: 27.2.2009

Репутация: нет
Всего: 13



точный текст ошибки какой ?
PM MAIL   Вверх
Egeni
Дата 25.6.2010, 20:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 21.5.2010

Репутация: нет
Всего: нет



Цитата

188 expected primary-expression before ']' token 

в строке
Цитата

        char **A=new char*[];

PM MAIL   Вверх
xvr
Дата 25.6.2010, 22:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Цитата(Egeni @ 25.6.2010,  20:30)
Цитата

188 expected primary-expression before ']' token 

в строке
Цитата

        char **A=new char*[];

Правильно говорит - в скобках должен быть указан размер

PM MAIL   Вверх
Egeni
Дата 2.7.2010, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 21.5.2010

Репутация: нет
Всего: нет



спасибо, понял, а как обратно получить из html информацию
1 между тегами <H2>....текст...</H2> и
2<td>Название</td><td class="Name">Цветок</td>
<td>Цвет</td><td class="color">Фиолетовый</td>
Название Цветок
Цвет Фиолетовый

Это сообщение отредактировал(а) Egeni - 2.7.2010, 17:21
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0618 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.