标题:求助,读取文档中特定值,然后运算。
只看楼主
coliziwei
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2011-6-20
结帖率:100%
已结贴  问题点数:20 回复次数:6 
求助,读取文档中特定值,然后运算。
小生不是学C的,老师给了个任务,用matlab输入并储存数据在一个txt文档中。
储存结果类似次格式
A
100
B
29
C
283
,,,

然后通过C程序读取这些值然后运算。问题在于。
第一,不是按顺序来使用这些值,可能先switch   D值。
然后在1情况下调用  C E F值进行运算,
2情况下,调用 C E G值进行运算。
第二,运算的程序已经存在,可以直接用,但是我不明白的是,是否可以一次性读取所有的值,然后存在一个缓冲空间,等待计算,
还是说必须在需要某数据的时候,再提前读取。

因为小生算是完全的C新手,所以希望能够给个例子,小生可以慢慢的对照着研究。
搜索更多相关主题的帖子: matlab 空间 老师 
2011-06-20 07:35
oszc
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:111
专家分:154
注 册:2011-4-15
得分:2 
储存格式应该属于顺序文件系统,要调用相应的值必须遍历这个文本文件来判断是否是需要的值,函数的话写入用fprintf ,读取用fscanf,遍历feof ,foef会遍历到最后一个数据的后一个空间所以要加以判断。
2011-06-20 15:15
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
得分:0 
全都读进来就好了。搞个数组来存放
2011-06-21 01:42
coliziwei
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2011-6-20
得分:0 
回复 3楼 voidx
如何全部读进去呢?能不能给个程序参考一下啊?
我是小白
2011-06-21 19:32
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
得分:18 
程序代码:
#include <stdio.h>
#include <malloc.h>
#include <string.h>

typedef struct struct_nv_pair {
    char name[5];
    int value;
    struct struct_nv_pair * next;
} nv_pair;

typedef struct {
    nv_pair * head;
    nv_pair * last;
} p_list;

char init_p_list(p_list * pl) {
    pl->last = pl->head = (nv_pair *) malloc(sizeof(nv_pair));
    if (pl->head == NULL) {
    return 1;
    }
    pl->head->next = NULL;
    return 0;
}

void append_parameter(p_list * pl, nv_pair * p) {
    if (p == NULL) {
    return;
    }
    p->next = NULL;
    pl->last->next = p;
    pl->last = p;
}

char get_parameter(int * value, p_list pl, char * name) {
    nv_pair * p;
    for (p = pl.head->next; p && strcmp(p->name, name); p = p->next);
    if (p) {
        *value = p->value;
        return 0;
    } else {
        return 1;
    }
}

int main() {
    p_list pl;
    nv_pair * p = NULL;
    FILE * fp = fopen("data.txt", "r");
    if (fp == NULL) {
        printf("Failed to open data file.");
        return 1;
    }
    if (init_p_list(&pl)) {
        printf("Failed to init the parameter list.");
        return 1;
    }
    while(!feof(fp)) {
        p = (nv_pair *) malloc(sizeof(nv_pair));
        if (p == NULL) {
            printf("Failed to allocate memory.");
            return 1;
        }
        fscanf(fp, " %s %d", p->name, &p->value);
        append_parameter(&pl, p);
    }
    p = NULL;
    fclose(fp);
    p = pl.head->next;
    while(p) {
        printf("%s = %d\n", p->name, p->value);
        p = p->next;
    }
    int v = 0;
    if (get_parameter(&v, pl, "A")) {
        printf("Parameter A not found.");
        return 1;
    }
    printf("A = %d\n", v);
    if (get_parameter(&v, pl, "D")) {
        printf("Parameter D not found.");
        return 1;
    }
    return 0;
}


测试文件如下:

程序代码:
A
100
B
29
C
283
2011-06-21 21:32
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
得分:0 
网速慢,发重了,删除

[ 本帖最后由 voidx 于 2011-6-21 21:36 编辑 ]
2011-06-21 21:33
coliziwei
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2011-6-20
得分:0 
回复 6楼 voidx
谢谢了。我现在可以根据您的程序进行学习了。
2011-06-23 20:47



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-343409-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.047255 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved