| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 6738 人关注过本帖
标题:关于C语言分割、修改、保存文件的
取消只看楼主 加入收藏
烛林小煜
Rank: 1
等 级:新手上路
帖 子:63
专家分:0
注 册:2014-7-13
收藏
得分:0 
回复 18 楼 TonyDeng
短路.zip (90.23 KB)
这两个里面.out文件时原文件   程序弄出来的文件时那些.txt文件   
2014-07-14 19:11
烛林小煜
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
烛林小煜
Rank: 1
等 级:新手上路
帖 子:63
专家分:0
注 册:2014-7-13
收藏
得分:0 
回复 31 楼 TonyDeng
先谢谢你    虽然我还没看懂程序呢   但是得先谢谢你   我先看看程序的啊   另外你后边说的 什么IDE中那些是什么意思    我是想把这段C程序  引入到MATLAB中的    我先看看程序吧  看懂了可能就明白了    还是谢谢你哈   我要是看不明白再问你哈   
2014-07-15 19:51
烛林小煜
Rank: 1
等 级:新手上路
帖 子:63
专家分:0
注 册:2014-7-13
收藏
得分:0 
回复 33 楼 TonyDeng
0X0c分隔开的?    不是空格吗
2014-07-15 19:55
烛林小煜
Rank: 1
等 级:新手上路
帖 子:63
专家分:0
注 册:2014-7-13
收藏
得分:0 
回复 34 楼 TonyDeng
对的  就是要的每一行的那两个数据   
我先看看程序要是看不懂 就问你   看懂了数字部分我没准自己就写了     就是最开始传的那个   数字部分需要的是第一次传的那种形式
2014-07-15 19:57
烛林小煜
Rank: 1
等 级:新手上路
帖 子:63
专家分:0
注 册:2014-7-13
收藏
得分:0 
回复 42 楼 TonyDeng
我看了 由于是C++的程序 鄙人没有学过C++只是略微学了点C   我做了做注释 不知道对不对  你有时间看看行不   
#include <Windows.h>
#include <cstdio>     //相当于C里面的stdio.h
#include <cstdlib>    //相当于stdlib.h
#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[])    /*argc: 整数,用来统计你运行程序时送给main函数的命令行参数的个数;* argv[ ]: 字符串数组,用来存放指向你的字符串参数的指针数组,                    每一个元素指向一个参数*/
 {
     if (argc < 2)
     {
         printf_s("程序使用格式: %s \"数据文件所在路径\"\n", strrchr(argv[0], '\\') + 1);    /*argv[0] 指向程序运行的全路径名,strrchr是从argv[0]中从右起查询到第一                                                    个'\\',返回值为‘\\’到结尾,即文件路径*/
         Pause();
         return EXIT_SUCCESS;            /*已定义的常量EXIT_SUCCESS*/
     }

     //const char* dataPath = "..\\open circuit\\";
    const char* dataPath = argv[1];                /*argv[1] 指向在DOS命令行中执行程序名后的第一个字符串,路径*/
     const char* flagString = "  TIME        V";        /*标志字符串为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;                        /*size_t相当于无符号长整形*/
     while (fgets(buffer, sizeof(buffer) - 1, inputFile) != NULL)        /*char *fgets(char *buf, int bufsize, FILE *stream);参数buf指向用来存储的地址,bufsize                                        存储的数据长度,stream读取的文件流*/
     {
         if (strstr(buffer, flagString) != NULL)                /*  strstr(str1,str2)返回st2在st1中的位置,若没有在st1中找到则返回null*/
         {
             ++count;
             FILE* outputFile;
             if (!CreateTargetFile(&outputFile, dataPath, count))        /*没创建则跳出*/
             {
                 Pause();
                 exit(EXIT_FAILURE);
                 break;
             }
             printf_s("正在生成输出文件: %d.txt\n", count);            /*count.txt*/
             bool escape = false;
             while ((fgets(buffer, sizeof(buffer) - 1, inputFile) != NULL) && !escape)        /*buffer指针位置存储inputfile非空无错*/
             {
                 if (strlen(buffer) > 0)                    /*buffer长度大于0*/
                 {
                     if (buffer[0] == 0x0c)                    /*Form Feed (馈页),什么意思?  */
                     {
                         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);        /*把path中长度为MAX_path-1的内容复制给fullFilePath,path存储的是路径*/
     strcat_s(fullFilePath, MAX_PATH - 1, name);        /*name是data.out,字符串链接,把name连接path后面*/
     if (fopen_s(file, fullFilePath, "rt") != 0)        /*打开的文件指针file,文件名fullFilenPath,访问类型rt(以文本文件读)*/
     {
         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)      /*创建*.txt文件*/
 {
     char fullFilePath[MAX_PATH];
     char numberString[4];
     bool success = true;

     strcpy_s(fullFilePath, MAX_PATH - 1, path);        /*把path中长度为MAX_path-1的内容复制给fullFilePath,path存储的是路径*/
     _itoa_s(count, numberString, sizeof(numberString), 10);    /*errno_t _itoa_s(int value,char *buffer,size_t sizeInCharacters,int radix);radix为10进制buffer的进制,                                    sizeInCharacters为buffer字符数组的长度,value为待转换整数。整体功能是把一个整数转换成字符串*/

     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();
 }
2014-07-17 16:12
烛林小煜
Rank: 1
等 级:新手上路
帖 子:63
专家分:0
注 册:2014-7-13
收藏
得分:0 
回复 41 楼 TonyDeng
大神,由于我需要用matlab调用这段程序,我matlab里有一个打开.out文件的按钮,我想通过这个按钮来实现对选择的out文件分割成txt
但是你给我的这段程序里需要用命令行,而且好像还得在IDE里设置.out文件的路径吧,能不能改下
2014-07-18 09:28
烛林小煜
Rank: 1
等 级:新手上路
帖 子:63
专家分:0
注 册:2014-7-13
收藏
得分:0 
回复 46 楼 TonyDeng
不是   我的意思是  我要调用的那个  需要用到void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])这么一个函数 才能在matlab中用    另外是这样的     我传了一个附件,就是附件上的那样   我想通过那个按钮然后打开选择文件的对话框,选择完文件后(一个.out文件),接下来执行的程序就是那个C/C++程序,C程序不需要输入任何参数 ,做到的功能就是以前说的那样,把选择的那个.out文件按照以前说的那种方式分割出来。最好是这段程序中不需要输入任何参数
。另外由于是在MATLAB中调用 ,所以需要一个void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])函数 ,这个函数好像是需要写到C程序里面。另外C这段程序执行结果是生成了*.txt(1-10)的文件,不需要在界面上显示出来  生成就行了   你看看有时间能不能给改一下  我C这方面学得不好 没怎么看懂 。
2014-07-18 15:39
烛林小煜
Rank: 1
等 级:新手上路
帖 子:63
专家分:0
注 册:2014-7-13
收藏
得分:0 
回复 51 楼 TonyDeng
不是  我的意思是   在那个选择对话框之后  我是选择了一个文件,这个文件的类型是.out,但是名字不一定是1.out  ,我想把这个选择的文件作为输入参数,分割成txt文件  而不是像你给我发的那个程序  需要指定.out文件的地址
2014-07-20 17:13
快速回复:关于C语言分割、修改、保存文件的
数据加载中...
 
   



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

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