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

Вытащить текст из файла - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
Egeni
10 / 10 / 1
Регистрация: 17.06.2010
Сообщений: 107
Записей в блоге: 1
25.07.2010, 02:29     Вытащить текст из файла #1
как в массив закинуть содержимое body?
я делаю без регулярных выражений, у меня получается вытянуть body, только если body открывается и закрывается в одной строке
до этого читал посимвольно и тот вариант пропускал не то что нужно


у меня вопрос: как читая построчно файл, удалить в нем не целую строку, а оставить часть
файл состоит из нескольких строк
<HTML><HEAD>
<title>Название</title></HEAD>
<body>многострочный текст
Текст текст текст
3 текст</body>
</HTML>
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Евгений М.
1033 / 974 / 53
Регистрация: 28.02.2010
Сообщений: 2,817
Завершенные тесты: 2
25.07.2010, 03:54     Вытащить текст из файла #2
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
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
 
int main()
{
    FILE* fp;
    char *str, *ptr, c;
    int size, bodysize, first, last, i=0;
    
    fp=fopen("input.html", "r");
    
    if (fp==NULL)
    {
        printf ("Couldn't open file\n");
        return 0;
    }
    
    fseek(fp, 0, SEEK_END);
    size=ftell(fp);
    
    if (size==0)
    {
        printf ("File is empty\n");
        fclose(fp);
        return 0;
    }
    
    str=(char*)malloc((size+1)*sizeof(char));
    if (str==NULL)
    {
        printf ("Malloc error\n");
        fclose(fp);
        return 0;
    }
    
    fseek(fp, 0, SEEK_SET);
    fread(str, 1, size, fp);
    
    while (str[i])
    {
        str[i]=tolower(str[i]);
        i++;
    }
 
    ptr=strstr(str,"<body>");
    if (ptr==0)
    {
        printf("body tag not found\n");
        fclose(fp);
        return 0;
    }
    first=ptr-str;
    
    ptr=strstr(str,"</body>");
    if (last==0)
    {
        printf("body tag not closed\n");
        fclose(fp);
        return 0;
    }
    last=ptr-str;
    
    free(str);
    
    if (last-first<0)
    {
        printf("wtf?\n");
        fclose(fp);
        return 0;
    }
    
    first+=6;
    last--;
    
    if (first-1==last)
    {
        printf("body tag is empty\n");
        fclose(fp);
        return 0;
    }
    
    bodysize=last-first+1;
    str=(char*)malloc((bodysize+1)*sizeof(char));
    
    fseek(fp, first, SEEK_SET);
    fread(str, 1, bodysize, fp);
    
    puts(str);
    
    fclose(fp);
    free(str);
    
    return 0;
}
Egeni
10 / 10 / 1
Регистрация: 17.06.2010
Сообщений: 107
Записей в блоге: 1
25.07.2010, 10:07  [ТС]     Вытащить текст из файла #3
программа не реагирует если вставить чтото другое не <body> а например <div>
и символы вконце не дочитывает и видимо режет строку
Евгений М.
1033 / 974 / 53
Регистрация: 28.02.2010
Сообщений: 2,817
Завершенные тесты: 2
25.07.2010, 10:10     Вытащить текст из файла #4
Выкладывайте файлы на которых программа обломалась.

Цитата Сообщение от Egeni Посмотреть сообщение
если вставить чтото другое не <body> а например <div>
Программа не рассчитана на <div>.
Egeni
10 / 10 / 1
Регистрация: 17.06.2010
Сообщений: 107
Записей в блоге: 1
31.07.2010, 00:18  [ТС]     Вытащить текст из файла #5
я заменил <body> на <div> и не прокатило
rrrFer
Заблокирован
01.08.2010, 14:58     Вытащить текст из файла #6
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
#include <iostream>
using std::cin;
using std::cout;
using std::endl;
#include <fstream>
using std::ifstream;
 
int main () {
    char    bStr[] = "<H1>",
            eStr[] = "</H1>",
            ifName[] = "in.txt";
    ifstream ifst;
    int i;
 
    ifst.open(ifName);
    if(!ifst)
        exit(-1);
 
    for(;!ifst.eof();){
        for(i=0;!ifst.eof()&&ifst.get()==bStr[i];i++);
        ifst.unget();
        if(!bStr[i]){
            for(;;){
                for(i=0;!ifst.eof()&&ifst.get()==eStr[i];i++);
                if(!eStr[i])
                    break;
                for(;i>=0;i--)
                    ifst.unget();
                cout<<(char)ifst.get();
            }
            cout<<endl<<"--------------------------------"<<endl;
        }
        else
            ifst.get();
    }
    cin.get();
    return 0;
}
Yandex
Объявления
01.08.2010, 14:58     Вытащить текст из файла
Ответ Создать тему
Опции темы

Текущее время: 10:20. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru