| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1142 人关注过本帖, 1 人收藏
标题:求写一个小程序!
只看楼主 加入收藏
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你试试在VC6上修改编译:
程序代码:
#include <cstdio>
#include <cstring>
#include <vector>

struct _Data
{
    char   Time[10];        // 时间
    short  Latitude;        // 纬度
    short  Longitude;        // 经度
    double Value;            //
};

std::vector<std::string> Time_List;        // 时间清单
std::vector<short> Latitude_List;        // 纬度清单
std::vector<short> Longitude_List;        // 经度清单
std::vector<_Data> Data_List;            // 数据表

void Load_Data(const char* time);
void Get_LatitudeList(FILE* file);
void Get_LongitudeList(FILE* file);
void Get_DataList(FILE* file, const char* time);
void Save_DataList(const char* filename);
double GetData(short longitude, short latitude, const char* time);

void main(int argc, char* argv[])
{
    for (int index = 1; index < argc; ++index)
    {
        char time[10];
        strcpy_s(time, sizeof(time), argv[index]);
        Time_List.push_back(std::string(time));
        Load_Data(time);
    }
    Save_DataList("2011.TXT");
}

// 读入指定文件的数据,例如2011.01.1.TXT,传入参数2011.01.1,自动补全扩展名为2011.01.1.TXT
void Load_Data(const char* time)
{
        char file_name[FILENAME_MAX];
        strcpy_s(file_name, sizeof(file_name), time);
        strcat_s(file_name, sizeof(file_name), ".TXT");

        FILE* source_file;
        errno_t errorCode = fopen_s(&source_file, file_name, "rt");
        if (Latitude_List.empty())
        {
            Get_LatitudeList(source_file);
        }
        if (Longitude_List.empty())
        {
            Get_LongitudeList(source_file);
        }
        Get_DataList(source_file, time);
        fclose(source_file);
}

// 读入纬度清单
void Get_LatitudeList(FILE* file)
{
    char buffer[1024];
    char seps[] = "\t";
    char* token;
    char* next_token;

    fseek(file, 0L, SEEK_SET);
    fgets(buffer, sizeof(buffer), file);
    token = strtok_s(buffer, seps, &next_token);
    while (token != NULL)
    {
        Latitude_List.push_back(atoi(token));
        token = strtok_s(NULL, seps, &next_token);
    }
}

// 读入经度清单
void Get_LongitudeList(FILE* file)
{
    char buffer[1024];

    fseek(file, 0L, SEEK_SET);
    fgets(buffer, sizeof(buffer), file);
    while (!feof(file))
    {
        if (fgets(buffer, sizeof(buffer), file) != NULL)
        {
            char seps[] = "\t";
            char* token;
            char* next_token;
            token = strtok_s(buffer, seps, &next_token);
            Longitude_List.push_back(atoi(token));
        }
    }
}

// 读入数据
void Get_DataList(FILE* file, const char* time)
{
    char buffer[1024];

    fseek(file, 0L, SEEK_SET);
    fgets(buffer, sizeof(buffer), file);
    int row = 0;
    while (!feof(file))
    {
        if (fgets(buffer, sizeof(buffer), file) != NULL)
        {
            ++row;
            char seps[] = "\t";
            char* token;
            char* next_token;
            int col = 0;
            token = strtok_s(buffer, seps, &next_token);
            while (token != NULL)
            {
                if (col > 0)
                {
                    _Data d;
                    strcpy_s(d.Time, sizeof(d.Time), time);
                    d.Latitude = Latitude_List[col - 1];
                    d.Longitude = Longitude_List[row - 1];
                    d.Value = atof(token);
                    Data_List.push_back(d);
                }
                token = strtok_s(NULL, seps, &next_token);
                ++col;
            }
        }
    }
}

// 另存数据到指定文本文件
void Save_DataList(const char* filename)
{
    FILE* file;
    errno_t errorCode = fopen_s(&file, filename, "wt");
    if (errorCode != 0)
    {
        printf_s("File %s create failure!\n", filename);
    }
    fprintf_s(file, "经度\t纬度");
    for (int index = 0; index != Time_List.size(); ++index)
    {
        fprintf_s(file, "\t%s", Time_List[index].c_str());
    }
    fprintf_s(file, "\n");
    for (int longitude_index = 0; longitude_index != Longitude_List.size(); ++longitude_index)
    {
        for (int latitude_index = 0; latitude_index != Latitude_List.size(); ++latitude_index)
        {
            fprintf_s(file, "%d\t%d", Longitude_List[longitude_index], Latitude_List[latitude_index]);
            for (int time_index = 0; time_index != Time_List.size(); ++time_index)
            {
                fprintf_s(file, "\t%10.2f", GetData(Longitude_List[longitude_index], Latitude_List[latitude_index], Time_List[time_index].c_str()));
            }
            fprintf_s(file, "\n");
        }
    }
    fclose(file);
    printf_s("Output file %s created!\n", filename);
   
    char command[FILENAME_MAX];
    sprintf_s(command, "NOTEPAD %s", filename);
    system(command);
}

// 根据经度、纬度和时间在数据表中取数据值
double GetData(short longitude, short latitude, const char* time)
{
    for (std::vector<_Data>::const_iterator index = Data_List.cbegin(); index != Data_List.cend(); ++index)
    {
        if ((index->Longitude == longitude) && (index->Latitude == latitude) && (strcmp(index->Time, time) == 0))
        {
            return index->Value;
        }
    }
    return 0;
}

授人以渔,不授人以鱼。
2012-10-17 10:51
lius0602
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2012-10-16
收藏
得分:0 
嗯,好的!谢了!

每天都是新的自己!
2012-10-17 14:15
lius0602
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2012-10-16
收藏
得分:0 
估计还会有好多问题不太懂,还要问您,麻烦您了!

每天都是新的自己!
2012-10-17 14:19
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
解释一下:这个是用命令行参数传入文件的,后面带6个文件名(不要.txt扩展名),程序自动把它们合并起来,注意按时间顺序,因为代码中没有进行排序操作。用VC6的话,可能有若干_s后缀的安全型函数有问题,修改一下用旧版本的函数就可以了,应该不会难的。

本来想把输入文件和输出文件清单放在一个参数文件中再给你的,这样不用敲很长的命令行(在IDE中可以设置命令行参数),不过你先看看有没有需要改动的地方吧,那个你自己做也行。

授人以渔,不授人以鱼。
2012-10-17 14:37
lius0602
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2012-10-16
收藏
得分:0 
嗯,好的!

每天都是新的自己!
2012-10-17 14:52
lius0602
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2012-10-16
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册

不出您所料,strcpy_s这种函数都出现了错误!

每天都是新的自己!
2012-10-18 10:49
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
改回旧版本的函数就可以了

授人以渔,不授人以鱼。
2012-10-18 11:10
lius0602
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2012-10-16
收藏
得分:0 
我改了好长时间,但是还是不成功,麻烦您在指点指点,帮帮忙!

每天都是新的自己!
2012-10-18 15:09
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:5 
必须要C代码吗

DO IT YOURSELF !
2012-10-18 15:16
lius0602
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2012-10-16
收藏
得分:0 
嗯,是的,最好是C代码!

每天都是新的自己!
2012-10-18 15:18
快速回复:求写一个小程序!
数据加载中...
 
   



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

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