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

Заполнение структуры из файла - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 8, средняя оценка - 5.00
КуДрЯшЕчКа
2 / 2 / 1
Регистрация: 01.11.2009
Сообщений: 60
28.09.2010, 19:17     Заполнение структуры из файла #1
Дан файл , содержащий информацию вида «1;162008;1;ООО «Слон»;1;2,5;».
Как можно сделать чтение структуры, если поля разделены точкой с запятой?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.09.2010, 19:17     Заполнение структуры из файла
Посмотрите здесь:

C++ Заполнение структуры через rand
Заполнение структуры C++
C++ Заполнение структуры значениями
Заполнение структуры через функцию C++
Заполнение структуры в шестнадцатеричном виде C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Day
 Аватар для Day
1149 / 954 / 57
Регистрация: 29.10.2009
Сообщений: 1,384
28.09.2010, 21:46     Заполнение структуры из файла #2
Есть такая функция char * strchr(char *s, ';');
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9372 / 5422 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
29.09.2010, 00:39     Заполнение структуры из файла #3
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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
    
#define BUF_LEN 128
 
typedef struct {
    int firstNumber;
    unsigned int date;
    int secondNumber;
    char name[BUF_LEN];
    int thridNumber;
    double dblNumber;
} data_t;
    
int parse_string(const char * str, const char * delim, data_t * dat){
    char * buf, * p;
    if ( ! dat ){
        return -1;
    }
    if ( ( buf = strdup(str) ) == NULL ){
        return -1;
    }
    if ( ( p = strtok(buf, delim) ) == NULL ){
        free(buf);
        return -1;
    }
    if ( sscanf(p, "%d", &dat->firstNumber) != 1 ){
        free(buf);
        return -1;
    }
    if ( ( p = strtok(NULL, delim) ) == NULL ){
        free(buf);
        return -1;
    }
    if ( sscanf(p, "%u", &dat->date) != 1 ){
        free(buf);
        return -1;
    }
    if ( ( p = strtok(NULL, delim) ) == NULL ){
        free(buf);
        return -1;
    }
    if ( sscanf(p, "%d", &dat->secondNumber) != 1 ){
        free(buf);
        return -1;
    }
    if ( ( p = strtok(NULL, delim) ) == NULL ){
        free(buf);
        return -1;
    }
    memset(dat->name, 0, sizeof(dat->name));
    if ( ! strncpy(dat->name, p, sizeof(dat->name) - 1) ){
        free(buf);
        return -1;
    }
    if ( ( p = strtok(NULL, delim) ) == NULL ){
        free(buf);
        return -1;
    }
    if ( sscanf(p, "%d", &dat->thridNumber) != 1 ){
        free(buf);
        return -1;
    }
    if ( ( p = strtok(NULL, delim) ) == NULL ){
        free(buf);
        return -1;
    }
    if ( sscanf(p, "%lf", &dat->dblNumber) != 1 ){
        free(buf);
        return -1;
    }
    
    free(buf);
    return 0;
}
 
void print_data(const data_t * dat){
    printf("# 1 : %d\n", dat->firstNumber);
    printf("# 2 : %d\n", dat->secondNumber);
    printf("# 3 : %d\n", dat->thridNumber);
    printf("Name : %s\n", dat->name);
    printf("Date : %u\n", dat->date);
    printf("Double : %.2f\n", dat->dblNumber);
}
 
#define DELIM ";"
 
int main(void){
    const char * str = "1;102010;13;AOZT \"Microsoft\";69;3.14;";
    data_t data;
    if ( parse_string(str, DELIM, &data) ){
        fprintf(stderr, "Parsing error!\n");
        exit(1);
    }
    print_data(&data);
    
    return 0;
}
gooseim
Эксперт C++
500 / 404 / 35
Регистрация: 23.09.2010
Сообщений: 1,139
29.09.2010, 00:56     Заполнение структуры из файла #4
Если в стиле c++ То можно getline(stream, str, ';')
КуДрЯшЕчКа
2 / 2 / 1
Регистрация: 01.11.2009
Сообщений: 60
29.09.2010, 15:42  [ТС]     Заполнение структуры из файла #5
огромное спасибо=))
Yandex
Объявления
29.09.2010, 15:42     Заполнение структуры из файла
Ответ Создать тему
Опции темы

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