| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1508 人关注过本帖
标题:求帮助~文件操作~把奇数行与偶数行分开放到不同的文件中去
只看楼主 加入收藏
gtrmao
Rank: 2
等 级:论坛游民
帖 子:38
专家分:32
注 册:2011-10-24
结帖率:75%
收藏
已结贴  问题点数:20 回复次数:8 
求帮助~文件操作~把奇数行与偶数行分开放到不同的文件中去
图片附件: 游客没有浏览图片的权限,请 登录注册
初学者求教我试了好多次,但程序运行时bbb.txt与ccc.txt文件总是啥都没~求高手指点
搜索更多相关主题的帖子: 疤痕 
2011-10-25 13:20
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:20 
你把代码的每一行都写个注释,写完了自己就看得出什么地方有问题。问题很多呢,慢慢研究吧,莫急,啃掉这只麻雀,胜于写10个程序。

授人以渔,不授人以鱼。
2011-10-25 14:22
gtrmao
Rank: 2
等 级:论坛游民
帖 子:38
专家分:32
注 册:2011-10-24
收藏
得分:0 
回复 2楼 TonyDeng
实在看不出啊。初学者,无奈啊。高手稍微指点下。关键试2个复制文件里啥都没,就算有错也应该有点东西吧。求高手指点
2011-10-25 14:51
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
没有内容是因为你fgetc()得到的数据没有储存在变量中用fputc()写出。
你这个代码错误很多,我甚至不知道你到底通过编译了没有。

授人以渔,不授人以鱼。
2011-10-25 14:53
gtrmao
Rank: 2
等 级:论坛游民
帖 子:38
专家分:32
注 册:2011-10-24
收藏
得分:0 
回复 4楼 TonyDeng
我让ch=fgetc()了还是没有数据。这个通过编译了。如果我把if语句测试换行的那语句省略的话是有数据被复制的。但是因为是全复制。我想要让其奇数行放bbb。txt偶数放ccc。txt不知道该则么办,所以加了用了if检测换行符,可是就啥都没了。
2011-10-25 15:13
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
我说了有很多地方有问题,整个错误不是一处两处造成的,还是逐个击破的好。你那判断语句也没写对。直接给你代码,似乎对你没实质帮助。

授人以渔,不授人以鱼。
2011-10-25 15:18
gtrmao
Rank: 2
等 级:论坛游民
帖 子:38
专家分:32
注 册:2011-10-24
收藏
得分:0 
回复 5楼 gtrmao
高手帮个忙,说下你是如何将其奇数放1个文件,偶数放另一文件的。我搞这玩意2天了。实在想不出了
2011-10-25 15:38
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
程序代码:
#include <stdio.h>
#include <string.h>

int GetNumber(char* str, const char delimiter);

int main(int argc, char* argv[])
{
    if (argc < 3)
    {
        printf_s("格式: %s <filename> /n:<n>\n", argv[0]);
        printf_s("其中:1<n<9\n");
        return -1;
    }

    int number = GetNumber(argv[2], ':');        // 分割文件数
    if (number == 0)
    {
        printf_s("参数/n:<n>格式不正确\n");
        return -2;
    }
    FILE** out;
    out = new FILE*[number];

    // 打开输入文件
    FILE* in;
    errno_t error = fopen_s(&in, argv[1], "rb");
    if (error != 0)
    {
        printf_s("文件%s打开错误\n", argv[1]);
        return error;
    }

    // 建立输出文件
    for (int index = 0; index < number; ++index)
    {
        size_t length = strlen(argv[1]) + 3;
        char* filename = new char[length];
        sprintf_s(filename, length, "%s.%1d", argv[1], index + 1);
        errno_t error = fopen_s(&out[index], filename, "wb");
        if (error != 0)
        {
            printf_s("文件%s建立错误\n", filename);
            return error;
        }
        delete[] filename;
    }

    // 分割文件操作
    // 机制:若是文本文件,每行必定以0D0A结束,则遇到0A才递增行号
    size_t line_no = 0;            // 行号
    while (!feof(in))
    {
        if (fputc(fgetc(in), out[line_no % number]) == 0x0A)
        {
            ++line_no;
        }
    }

    // 关闭打开的文件
    for (int index = 0; index < number; ++index)
    {
        fclose(out[index]);
    }
    delete[] out;
    fclose(in);

    printf_s("文件%s分割完成\n", argv[1]);

    return 0;
}

int GetNumber(char* str, const char delimiter)
{
    int number = 0;

    while (*str != delimiter)
    {
        ++str;
    }
    ++str;
    sscanf_s(str, "%d", &number);

    return number;
}

授人以渔,不授人以鱼。
2011-10-26 13:25
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
修正了一点BUG,再贴一次:

程序代码:
/*----------------------------
程序说明: 将指定文本文件按行分割为若干份
使用格式: test_File <文件名> /n:<分割数>
----------------------------*/

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

int main(int argc, char* argv[])
{
    if (argc < 3)
    {
        printf_s("格式: %s <filename> /n:<n>\n", argv[0]);
        return -1;
    }

    int number = 0;                // 分割文件数
    sscanf_s(strchr(argv[2], ':') + 1, "%d", &number);
    if (number == 0)
    {
        printf_s("参数%s格式不正确\n", argv[2]);
        return -2;
    }
    FILE** out;
    out = new FILE*[number];
    if (!out)
    {
        printf_s("内存分配失败\n");
        return -3;
    }

    // 打开输入文件
    FILE* in;
    errno_t error = fopen_s(&in, argv[1], "rb");
    if (error != 0)
    {
        printf_s("文件%s打开错误\n", argv[1]);
        return error;
    }

    // 建立输出文件
    for (int index = 0; index < number; ++index)
    {
        char buffer[5];            // 假定分割数不超过4位数
        _itoa_s(number, buffer, sizeof(buffer), 10);
        size_t length = strlen(argv[1]) + _countof(buffer);
        char* filename = new char[length];
        if (filename)
        {
            sprintf_s(filename, length, "%s.%d", argv[1], index + 1);
            errno_t error = fopen_s(&out[index], filename, "wb");
            if (error != 0)
            {
                printf_s("文件%s建立错误\n", filename);
                return error;
            }
            delete[] filename;
        }
    }

    // 分割文件操作
    // 机制:若是文本文件,每行必定以0D0A结束,则遇到0A才递增行号
    size_t line_no = 0;            // 行号
    while (!feof(in))
    {
        if (fputc(fgetc(in), out[line_no % number]) == 0x0A)
        {
            ++line_no;
        }
    }

    // 关闭打开的文件
    for (int index = 0; index < number; ++index)
    {
        fclose(out[index]);
    }
    delete[] out;
    fclose(in);

    printf_s("文件%s分割完成\n", argv[1]);

    return 0;
}

授人以渔,不授人以鱼。
2011-10-27 15:48
快速回复:求帮助~文件操作~把奇数行与偶数行分开放到不同的文件中去
数据加载中...
 
   



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

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