| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4142 人关注过本帖
标题:【平安夜散分】武偉進
只看楼主 加入收藏
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
结帖率:100%
收藏
已结贴  问题点数:100 回复次数:33 
【平安夜散分】武偉進
程序代码:
#include <cstdio>
#include <cstdlib>
#include "common.h"
#include "database.h"

/*
Field Student_Fields[] = {
    { "学号", 'I', 4, 0 },
    { "姓名", 'C', 30, 0 },
    { "性别", 'C', 1, 0 },
    { "年龄", 'I', 2, 0 },
    { "身份证", 'C', 18, 0 },
    { "联系电话", 'C', 20, 0 },
    { "地址", 'C', 50, 0 }
};
Header Student_Header = { _countof(Student_Fields), Student_Fields };
*/

Header Student_Header;

void List_Fields(const Header* header);

int main(int argc, char* argv[])
{
    if (argc < 2)
    {
        printf_s("命令格式: %s 数据文件名\n", Get_FileName(argv[0]));
        Pause();
        return EXIT_FAILURE;
    }

    FILE* file;
    if (fopen_s(&file, argv[1], "rt") == 0)
    {
        Load_Header(file, &Student_Header);
        fclose(file);
        List_Fields(&Student_Header);
    }
    //Create_Table(argv[1], &Student_Header);

    Pause();
    return EXIT_SUCCESS;
}

void List_Fields(const Header* header)
{
    size_t index;
    for (index = 0; index < header->Field_Number; ++index)
    {
        printf_s("%s  %c  %d,%d\n", 
            header->Fields[index].Name, 
            header->Fields[index].Type, 
            header->Fields[index].Length, 
            header->Fields[index].Decimal);
    }
}

图片附件: 游客没有浏览图片的权限,请 登录注册
2015-12-24 21:22
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
程序代码:
bool Load_Header(FILE* file, Header* header)
{
    char buffer[1024];
    bool success = true;

    rewind(file);
    bool inHeader = false;
    while (!ferror(file) && !feof(file) && fgets(buffer, _countof(buffer), file))
    {
        if (!inHeader)
        {
            _strupr_s(buffer, _countof(buffer));
            if (strcmp(buffer, "[HEADER]\n") == 0)
            {
                inHeader = true;
                continue;
            }
        }
        if (inHeader)
        {
            sscanf_s(buffer, "Fields Number: %u", &header->Field_Number);
            header->Fields = (Field*)calloc(header->Field_Number, sizeof(Field));
            if (header->Fields)
            {
                for (size_t index = 0; index < header->Field_Number; ++index)
                {
                    if (fgets(buffer, _countof(buffer), file))
                    {
                        Get_String(buffer, header->Fields[index].Name, sizeof(header->Fields[index].Name), '\"');
                        const char* p = strchr(buffer, '=');
                        if (p)
                        {
                            sscanf_s(p + 1, "%1c", &header->Fields[index].Type, 1);
                        }
                        else
                        {
                            header->Fields[index].Type = 'U';
                        }
                        p = strchr(buffer, '[');
                        if (!p || (sscanf_s(p, "[%d,%d]", &header->Fields[index].Length, &header->Fields[index].Decimal) != 2))
                        {
                            success = false;
                            break;
                        }
                    }
                    else
                    {
                        header->Field_Number = index;
                        success = false;
                        break;
                    }
                }
            }
            break;
        }
    }

    return success;
}


[此贴子已经被作者于2015-12-24 21:42编辑过]


授人以渔,不授人以鱼。
2015-12-24 21:27
诸葛欧阳
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:流年
等 级:贵宾
威 望:82
帖 子:2790
专家分:14619
注 册:2014-10-16
收藏
得分:9 
啥意思⊙_⊙

一片落叶掉进了回忆的流年。
2015-12-24 21:48
醒山
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:9
帖 子:463
专家分:2071
注 册:2015-5-25
收藏
得分:9 
不明觉厉
2015-12-24 21:53
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
程序代码:
#pragma once

// 字段結構
struct Field
{
    char Name[20];            // 名稱
    char Type;                // 類型
    int  Length;            // 長度
    int  Decimal;            // 小數位
};

// 表頭結構
struct Header
{
    size_t Field_Number;    // 字段數
    Field* Fields;            // 字段列表
};

// 用指定的結構建立數據表文件
errno_t Create_Table(const char* tableName, const Header* header);

// 從文件中讀取表頭
bool Load_Header(FILE* file, Header* header);

授人以渔,不授人以鱼。
2015-12-24 21:57
tlliqi
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:204
帖 子:15453
专家分:65956
注 册:2006-4-27
收藏
得分:9 
科普呢?
2015-12-24 22:14
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
教他如何讀文件

授人以渔,不授人以鱼。
2015-12-24 22:15
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
寫出去是這樣:
程序代码:
void Write_Header(FILE* file, const Header* header)
{
    fprintf_s(file, "%s\n", "[Header]");
    fprintf_s(file, "Fields Number: %u\n", header->Field_Number);
    for (size_t index = 0; index < header->Field_Number; ++index)
    {
        fprintf_s(file, "\"%s\"", header->Fields[index].Name);
        fprintf_s(file, "=%c[%d,%d]\n", header->Fields[index].Type, header->Fields[index].Length, header->Fields[index].Decimal);
    }
}

授人以渔,不授人以鱼。
2015-12-24 22:25
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
這是用文本格式的寫法,比較複雜,效率也低一點的。不過改用二進値格式的話,數據結構不用變化,在內部仍然是一樣的數據組織。

[此贴子已经被作者于2015-12-24 22:30编辑过]


授人以渔,不授人以鱼。
2015-12-24 22:27
hellovfp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:禁止访问
威 望:30
帖 子:2976
专家分:7697
注 册:2009-7-21
收藏
得分:9 
码了多少行代码了?如果用户写了写数据进去,要删除,添加些字段肿么办?还有用户一不小心修改到表头数据?

[此贴子已经被作者于2015-12-25 01:15编辑过]


我们都在路上。。。。。
2015-12-25 01:11
快速回复:【平安夜散分】武偉進
数据加载中...
 
   



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

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