| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 6738 人关注过本帖
标题:关于C语言分割、修改、保存文件的
只看楼主 加入收藏
烛林小煜
Rank: 1
等 级:新手上路
帖 子:63
专家分:0
注 册:2014-7-13
收藏
得分:0 
回复 18 楼 TonyDeng
短路.zip (90.23 KB)
这两个里面.out文件时原文件   程序弄出来的文件时那些.txt文件   
2014-07-14 19:11
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你解释一下这若干个.txt文件的数据是怎么从一个.out文件生成的?我看到第一个.txt文件的数据,第一栏的可以.out中找到,但第二栏的那些不知从哪里来。而且这个文档的构造跟原先的1.out不同,可见你的真实需求是可变的。

[ 本帖最后由 TonyDeng 于 2014-7-14 20:05 编辑 ]

授人以渔,不授人以鱼。
2014-07-14 19:51
烛林小煜
Rank: 1
等 级:新手上路
帖 子:63
专家分:0
注 册:2014-7-13
收藏
得分:0 
回复 22 楼 TonyDeng
对的   就是变化的   我的意思是 我后来传的那个(模拟电路做出来的)  我要的是里面的所有这种类型的数据   把这种类型的数据提出来    (N01952)表示一个点   每一个点的这个数据提出来放到一个文本文档中,就是.txt      数据本身所在行肯定是变化的    只能用其他方法来做     
    TIME        V(N01952)   
   6.250E-02  -7.442E-01
   6.275E-02  -7.573E-01
   6.300E-02  -7.662E-01
   6.325E-02  -7.711E-01
   6.350E-02  -7.716E-01
   6.375E-02  -7.678E-01
   6.400E-02  -7.596E-01
   6.425E-02  -7.472E-01
   6.450E-02  -7.305E-01
   6.475E-02  -7.097E-01
   6.500E-02  -6.849E-01
   6.525E-02  -6.563E-01
   6.550E-02  -6.240E-01
   6.575E-02  -5.881E-01
   6.600E-02  -5.489E-01
最开始传那个是比较简单的   数字电路做出来的数据  那个就是那种形式  把那种形式的数据提取出来保存起来   
2014-07-15 08:30
烛林小煜
Rank: 1
等 级:新手上路
帖 子:63
专家分:0
注 册:2014-7-13
收藏
得分:0 
回复 22 楼 TonyDeng
还有我那个txt文件和out文件可能不对应  但是就是那个意思   把那类数据提出来
2014-07-15 08:31
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
按新传的那两个做是吧?一组Time/V值输出到一个.txt文件中。

授人以渔,不授人以鱼。
2014-07-15 08:42
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
我用VC++12写哦,尽量用C格式,个别新版本的安全函数,你回到VC++6上需要自己调整回来。我不可能安装一个VC6测试过再给你的,只能保证在自己的VC12上通过。

授人以渔,不授人以鱼。
2014-07-15 12:34
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
鉴于你上传文件显示的用法,一个原文件输出多个结果文件,我给你修改一下程序的用法,把数据分类集中在一个文件夹中,文件名是统一的(目录名不同),程序启动时用命令行参数指定处理的目录。

授人以渔,不授人以鱼。
2014-07-15 13:00
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:15 
你看看生成的结果对不对:

open circuit.zip (91.71 KB)

授人以渔,不授人以鱼。
2014-07-15 14:22
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
运行画面:

图片附件: 游客没有浏览图片的权限,请 登录注册

授人以渔,不授人以鱼。
2014-07-15 14:30
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
代码如下:

程序代码:
#include <Windows.h>
#include <cstdio>
#include <cstdlib>
#include <conio.h>

bool OpenSourceFile(FILE** file, const char* path, const char* name);
bool CreateTargetFile(FILE** file, const char* path, size_t count);
HLOCAL GetErrorMessage(DWORD error_code);
void Pause(void);

int main(int argc, char* argv[])
{
    if (argc < 2)
    { 
        printf_s("程序使用格式: %s \"数据文件所在路径\"\n", strrchr(argv[0], '\\') + 1);
        Pause();
        return EXIT_SUCCESS;
    }

    //const char* dataPath = "..\\open circuit\\";
    const char* dataPath = argv[1];
    const char* flagString = "  TIME        V";

    printf_s("处理路径: %s\n", dataPath);
    FILE* inputFile;
    if (!OpenSourceFile(&inputFile, dataPath, "data.out"))
    {
        Pause();
        exit(EXIT_FAILURE);
    }
    char buffer[1024];
    size_t count = 0;
    while (fgets(buffer, sizeof(buffer) - 1, inputFile) != NULL)
    {
        if (strstr(buffer, flagString) != NULL)
        {
            ++count;
            FILE* outputFile;
            if (!CreateTargetFile(&outputFile, dataPath, count))
            {
                Pause();
                exit(EXIT_FAILURE);
                break;
            }
            printf_s("正在生成输出文件: %d.txt\n", count);
            bool escape = false;
            while ((fgets(buffer, sizeof(buffer) - 1, inputFile) != NULL) && !escape)
            {
                if (strlen(buffer) > 0)
                {
                    if (buffer[0] == 0x0c)
                    {
                        escape = true;
                        break;
                    }
                    fprintf_s(outputFile, "%s", buffer);
                }
            }
            fclose(outputFile);
        }
    }
    fclose(inputFile);

    Pause();
    return EXIT_SUCCESS;
}

bool OpenSourceFile(FILE** file, const char* path, const char* name)
{
    char fullFilePath[MAX_PATH];
    bool success = true;

    strcpy_s(fullFilePath, MAX_PATH - 1, path);
    strcat_s(fullFilePath, MAX_PATH - 1, name);
    if (fopen_s(file, fullFilePath, "rt") != 0)
    {
        HLOCAL errorMessage = GetErrorMessage(GetLastError());
        printf_s("文件\"%s\"打开失败: %s\n", fullFilePath, errorMessage);
        LocalFree(errorMessage);
        success = false;
    }

    return success;
}

bool CreateTargetFile(FILE** file, const char* path, size_t count)
{
    char fullFilePath[MAX_PATH];
    char numberString[4];
    bool success = true;

    strcpy_s(fullFilePath, MAX_PATH - 1, path);
    _itoa_s(count, numberString, sizeof(numberString), 10);
    strcat_s(fullFilePath, MAX_PATH - 1, numberString);
    strcat_s(fullFilePath, MAX_PATH - 1, ".txt");
    if (fopen_s(file, fullFilePath, "wt") != 0)
    {
        HLOCAL errorMessage = GetErrorMessage(GetLastError());
        printf_s("文件\"%s\"创建失败: %s\n", fullFilePath, errorMessage);
        LocalFree(errorMessage);
        success = false;
    }

    return success;
}

HLOCAL GetErrorMessage(DWORD errorCode)
{
    HLOCAL messageText = NULL;
    FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ALLOCATE_BUFFER, NULL, errorCode, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPSTR)&messageText, 0,    NULL);
    return messageText;
}

void Pause(void)
{
    printf_s("\nPress any key to continue...");
    _getch();
}


[ 本帖最后由 TonyDeng 于 2014-7-15 15:03 编辑 ]

授人以渔,不授人以鱼。
2014-07-15 14:33
快速回复:关于C语言分割、修改、保存文件的
数据加载中...
 
   



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

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