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

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

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

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

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

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

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


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

Блок-схемы по тексту! - C++
Подскажите программу для составления блок-схем по тексту в С++.

Форматирование тексту + ошибки + лишнее - C++
Вот задача + решение // xz.cpp : Defines the entry point for the console application. // #include &quot;stdafx.h&quot; #include...

Не могу вернуться к тексту программы - C++
Программа вобщем-то работает, но после выполнения компилятор (Borland C++ ) не возвращает к тексту программы как обычно. (если что коряво...

Блок-схему по тексту проги - C++
помогите сделать блок схему по проге: #include &lt;iostream&gt; #include &lt;string&gt; #include &lt;conio.h&gt; using namespace std; int...

Написать комментарии к тексту программы (самое основное) - C++
# include&lt;iostream&gt; # include&lt;conio.h&gt; # include&lt;string&gt; # include&lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;cstring&gt; using...

Добавить комментарии по тексту программы и выполнить изменения в коде - C++
#include &lt;iostream&gt; using namespace std; int a=1; char b='f'; int main()

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
accept
4821 / 3241 / 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
}

Вот что наваял.... но прога просто разбирает файл по строками и выделяет из строк нужное мне и записывает в файл.. можно ли теперь создать структуру?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.04.2010, 05:04     поиск по тексту
Еще ссылки по теме:

Поиск по тексту - C#
Здраствуйте. Хотелось бы поинтересоваться, можно ли канибуть програмно организоать поиск отдельных слов в тексте. И по возможности если...

Поиск по тексту - Delphi
помогите решить такое задание, подается массив текста, найти позицию первой даты, если нет то выдать сообщение что нет, формат даты такой...

Правильный поиск по тексту - Delphi
Есть текст, например: Какой-то текст +1 бла-бла-бла. пример 22+ 3 ответ... + бла + 123456789. Ещё какой-то текст и тут тоже текст....

Поиск по тексту и изменение - Delphi
Значит есть список допустим он такой: acura-cl-05.jpg acura-legend-v6-ls-06.jpg Необходимо значит - найти - есть ли в списке...


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

Или воспользуйтесь поиском по форуму:
accept
4821 / 3241 / 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     поиск по тексту
Ответ Создать тему
Опции темы

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