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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Rusik19872
0 / 0 / 0
Регистрация: 14.04.2010
Сообщений: 14
#1

поиск по тексту - C++

14.04.2010, 10:21. Просмотров 420. Ответов 3
Метки нет (Все метки)

Привет всем. У меня такая задач. Нужно было разобрать файл, обработать его(вытащить из него нужное) и записать в др файл(с этими задачами я справился.). файл который я сконфигурировал выглядит след образом

id="тут имя точки"
>тут адрес этой точки<
>тут адрес этой точки<
>тут адрес этой точки<
>тут адрес этой точки<
id="тут имя точки"
и т.д.


Помогите пожалуйста хотябы идеями как можно сделать поиск по такому файлу. к примеру мне надо по адресу найди имя точки и наоборот если я знаю имя точки выдавало бы ее адреса.. Заранее спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.04.2010, 10:21     поиск по тексту
Посмотрите здесь:

C++ Поиск. Последовательный поиск
C++ Поиск. Бинарный поиск
C++ Блок-схемы по тексту!
Не могу вернуться к тексту программы C++
C++ Форматирование тексту + ошибки + лишнее
Блок-схему по тексту проги C++
Написать комментарии к тексту программы (самое основное) C++
Поиск пикселя и поиск изображения на экране C++
C++ Добавить комментарии по тексту программы и выполнить изменения в коде

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
accept
4819 / 3239 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
14.04.2010, 11:04     поиск по тексту #2
C
1
2
3
4
5
struct point {
    char name[100];
    char **addresses;
    long quantity;
};
это струтктура для точки, которая включает имя, массив адресов (строк), количество адресов
массив адресов выделяется с помощью malloc() и подключается к структуре
копирование адресов через strcpy(), например
Rusik19872
0 / 0 / 0
Регистрация: 14.04.2010
Сообщений: 14
15.04.2010, 00:58  [ТС]     поиск по тексту #3
Спасибо. тут потребовались большие данные и я сделал так структуру

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
               struct adr
    {
        int hub;
        int prior;
        char adrr[30];
    };
 
    struct KKS
    {
        char name[30];
        int num;
        adr dev[4];
    };
вот файл по которому надо делать данный поиск выглядит так

id="имя точки"
hub=" " prior=" ">адрес
hub=" " prior=" ">адрес
hub=" " prior=" ">адрес
hub=" " prior=" ">адрес
id=" "
и т.д.

вот. как дальше пока еще не понял=(

Добавлено через 4 часа 16 минут
Ребят. хелп.. вообще не могу въехать как сделать=( хоть какую нить идейку подкинте

Добавлено через 9 часов 4 минуты
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
#include <iostream>                             //*************************************************************//
#include <string.h>                             //*                       Разбор файла                        *//
#include <stdio.h>                              //*                                                           *//
#define MAXLIN 200                              //*************************************************************//
using namespace std;
 
 
 
 
//struct KKS_NAME_ADR_STRUCT
//{
//      int hub;
//      int prior;
//      char nameADR[30];
//      char nameKKS[30];
//};
 
//KKS_NAME_ADR_STRUCT   KKS_NameAdr[ 2000 ];
int main ()
{
    FILE *in, *out;                           //объявление файлов
    char *sname;                              //строка с ККС
    char *sname1;                             //строка с адресом
    char string [MAXLIN];                     //длина строки
    char str[] = "<device dev_";              //начало строки с ККС
    char str1[] = "  <route ";                //начало строки с адресом
    int numRec=0;                             //считаем кол-во строк с ККС
    int numRec1=0;                            //считаем кол-во строк с адресом
    int num;                                  //общее кол-во строк
    in = fopen("dev_knpp.txt", "r");          //открываем файл in для чтения
    out = fopen("test.txt", "w");             //открываем файл out для записи
    while(fgets(string, MAXLIN, in) != NULL)  //читаем построково весь файл in
    {
        sname = strstr(string, str);          //получаем строку с ККС
        sname1 = strstr(string, str1);        //получаем строку с адресом
        if(sname != NULL)                     //если строка с ККС не нулевая,то вырезаем из строки имя
            {   
            int beg = strlen(str);            //начала имени ККС
            int end = strlen(sname) - beg;    //Конец имени ККС
            int i;                            
            char res[MAXLIN];                 //объявление результата
            for(i=0; i<(end-beg); i++)
            {
                res[i] = sname[beg+i];
            }
            res[i] = '\n';
            res[i+1] = 0;
            fputs(res, out);                  //записываем в файл out имя ККС
            cout << res;                      //выводим имя ККС
            numRec++;                         //кол-во строк
            }
        if(sname1 != NULL)                    //если строка с адресом не нулевая, то вырезаем из строки адрес
            {
            int beg1 = strlen(str1);          
            int end1 = strlen(sname1) - beg1;
            int k;
            char res1[MAXLIN];
            for(k=0; k<(end1-beg1+1); k++)
            {
                res1[k] = sname1[beg1+k];
            }
            res1[k] = '\n';
            res1[k+1] = 0;
            fputs(res1, out);                  //записываем в файл out адрес
            cout << res1;                      //выводим адрес
            numRec1++;                         //кол-во строк
            }
    }
    cout << "Recotds Number = " << numRec << "\n"; //вывод общего кол-ва строк ККС
    cout << "Recotds Number = " << numRec1 << "\n";//вывод общего кол-ва строк адресов
    fclose(in);                                //закрываем файл in
    fclose(out);                               //закрываем файл out
}

Вот что наваял.... но прога просто разбирает файл по строками и выделяет из строк нужное мне и записывает в файл.. можно ли теперь создать структуру?
accept
4819 / 3239 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
15.04.2010, 05:04     поиск по тексту #4
Код
id="имя точки1"
hub=" " prior=" ">адрес
hub=" " prior=" ">адрес
hub=" " prior=" ">адрес
hub=" " prior=" ">адрес
id="имя точки2"
hub=" " prior=" ">адрес
hub=" " prior=" ">адрес
hub=" " prior=" ">адрес
hub=" " prior=" ">адрес
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
int GetKKS(struct KKS *p, FILE *infile)
{
    int retval;
    struct KKS kks;
    int i;
 
    
    /* p->num устанавливается где-то выше */
 
 
    retval = GetKKSId(kks.name, infile);
    
    if (retval != 0)
        return -1;
 
 
    for (i = 0; i < 4; i++) {
 
        retval = GetKKSAddr(&kks.dev[i], infile);
    
        if (retval != 0)
            return -2;
 
    }
 
 
    *p = kks;
 
 
    return 0;
}
C
1
2
3
4
5
6
7
8
9
int GetKKSId(char *p, FILE *infile)
{
    ;
}
 
int GetKKSAddr(struct adr *p, FILE *infile)
{
    ;
}
Добавлено через 5 минут
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
int GetKKSId(char *p, FILE *infile)
{
 
    strcpy(p, "one");
 
    return 0;
}
 
int GetKKSAddr(struct adr *p, FILE *infile)
{
    struct adr a;
 
 
    a.hub = 1;
 
    a.prior = 1;
 
    strcpy(a.addr, "addr1");
 
 
    *p = a;
 
 
    return 0;
}
псевдоданные
Yandex
Объявления
15.04.2010, 05:04     поиск по тексту
Ответ Создать тему
Опции темы

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