Форум программистов, компьютерный форум CyberForum.ru

Программа чтения HTML-доумента - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Цикл с++ http://www.cyberforum.ru/cpp-beginners/thread148373.html
Вводится последовательность целых чисел, 0 – конец последователь- ности. Содержит последовательность хотя бы два числа, кратных 3,5 и 7? как это осуществить? желательно сначала натолкнуть на мысль
C++ нуна добить тупую прогу Дан бесконечный ряд заданный " e^(-1)= 1 - x + (x^2/2!)-(x^3/3!)+(x^4/4!)-..." |x|<1. Написать на языке СИ++ программу, вычисляющую функцию, представленную в виде ряда с заданной точностью e=0,001. Значение переменной x вводить с клавиатуры. Предусмотреть проверку (при необходимости) значения переменной x, в соответствии со своим вариантом задания. Программа должна быть выполнена с... http://www.cyberforum.ru/cpp-beginners/thread148362.html
C++ Работа с символьным массивом
Помогите пожалуйста.. Определить символьный массив размером строки.С клавиатуры ввести предложение(не менее 5 слов,которые разделены пробелами).Удалить из предложения слова,которые содержать две буквы "а".
C++ как сделать exe файл?
Проблема такая: написал программу на С++, но как мне теперь запаковать ее в exe файл, чтобы программа запускалась без C++? Помогите пожалуйста!
C++ Дана действительная квадратная матрица http://www.cyberforum.ru/cpp-beginners/thread148312.html
Программы для dev c++ 1. Дана действительная квадратная матрица порядка n. Заменить нулями все ее элементы расположенные на главной диагонали и выше нее. 2.Определить наименьший элемент каждой четной строки матрицы a. Помогите плиз:)
C++ Дано целочисленная квадратная матрица. Определить: Составить программу обработки двухмерного массива используя указатели и функции, выполнив каждый пункт задания в виде функции. Все необходимые данные для функции должни передаваться в качестве параметров. Используя глобальные изменении в функциях не допускается. Дано целочисленная квадратная матрица. Определить: -Сумму модулей элементов, находящихся выше главной диагонали; -Количество... подробнее

Показать сообщение отдельно
Kovy
 Аватар для Kovy
7 / 7 / 0
Регистрация: 29.04.2009
Сообщений: 412
22.06.2010, 14:37     Программа чтения HTML-доумента
Вот таким бло исходное задание:
Термином является слово, выделенное «жирным» шрифтом (тег <b></b>). Программа находит термины в группе html-файлов, находящихся в заданном каталоге, и составляет таблицу ссылок на них, либо на абзацы, в которых они находятся.

Прога вроде должна работать, но не работает( Если указываю путь с самого начала, где нет файла нужного расширения, то пишет, что файл не найден, а если указываю правильный путь, то прога сразу падает. Причем не выводит никаких ошибок, просто идет закрытие программы и предложение провести отладку. Из чего я сделал вывод, что прога падает либо при открытии файла, либо при его чтении... Подскажите пожалуйста, что не так и что исправить.. и огромная просьба объяснить доступно)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
#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
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 19:52. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru