人也清瘦 2023-07-26 21:25 采纳率: 66.7%
浏览 58
已结题

现在如果把csv文件换成输出成txt文件,怎样修改代码才能顺利读取文件

这张图片的内容是csv文件

img

读取并存储各个元素以用以计算的代码如下

include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include<iostream>
#include<math.h>
#include<stdlib.h>
#include<fstream>
#include<sstream>
#include <complex>
#include <string.h>


using namespace std;
 
typedef struct record
{
    int serial_number;
    char code_name[128];
    char name[128];
    int number;
    char material[128];
    float single_weight;
    float total_weight;
    char material_code[128];
    char remark[128];
}record;
 
#define MAX_LINE 1024
static record records_[MAX_LINE];
 
int main()
{
    int ret,i,count;
    FILE* f = fopen("D://zhao//0725//32处理前.csv", "rb");        
    if(!f)
        cout<<"fail to read file"<<'\n';
    //cin.get();


    for (i = 0; i < MAX_LINE; i++)
    {
        ret = fscanf(f, "%d,%[^,],%[^,],%d,%[^,],%f,%f,%[^,],%[^\r]", &records_[i].serial_number, 
            records_[i].code_name, records_[i].name, &records_[i].number, records_[i].material,
            &records_[i].single_weight, &records_[i].total_weight, records_[i].material_code, records_[i].remark);//按行读取
        if(records_[i].serial_number == 0)
            break;    
    }
    fclose(f);
    count = i;
    printf("csv line count %d\n", count);    
    for (i = 0; i < count; i++)
    {
        cout<<"i="<<i<<'\t'<<records_[i].serial_number<<'\t'<<records_[i].remark<<'\n';
    } 





    ofstream of("D://zhao//0725//处理后//11.txt");
    //of.setf(ios::fixed);
    if(!of)
    {
        cout<<"不能打开目的文件\n";
        cin.get();
    }
    
    of<<"序号"<<'\t'<<"物料码"<<'\t'<<"名称"<<'\t'<<"代号"<<'\t'<<"材料"<<'\t'<<"数量"<<'\t'<<"         "<<'\t'<<"备注"<<'\n';
    for(i>0;i--;)//nnp:particle name//
    {


        of<<records_[i].serial_number<<'\t'<<records_[i].material_code<<'\t'<<records_[i].name<<'\t'<<records_[i].code_name<<'\t'<<records_[i].material<<'\t'<<records_[i].number<<'\t'<<"         "<<'\t'<<records_[i].remark<<'\n';
        
    }

    cout<<"Complete the calcula"<<'\n';
    cin.get();
    return 0;
}


现在如果把csv文件换成输出成txt文件,内容还是一样,怎样修改代码才能顺利读取文件。

csv文件如下:

img

txt文件如下:

img

@churuxu

相关csv和txt文件可以从如下链接下载,劳烦各位帮忙测试一下。提取码1234。
https://pan.baidu.com/s/1_cCnJCKsum5axE089D4ECA

  • 写回答

12条回答 默认 最新

  • churuxu 2023-07-27 09:45
    关注
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include<iostream>
    #include<math.h>
    #include<stdlib.h>
    #include<fstream>
    #include<sstream>
    #include <complex>
    #include <string.h>
     
     
    using namespace std;
     
    typedef struct record
    {
        int serial_number;
        char code_name[128];
        char name[128];
        int number;
        char material[128];
        float single_weight;
        float total_weight;
        char material_code[128];
        char remark[128];
    }record;
     
    #define MAX_LINE 1024
    static record records_[MAX_LINE];
     
    int main()
    {
        int ret,i,count;
        FILE* f = fopen("a.csv", "rb");        
        if(!f)
            cout<<"fail to read file"<<'\n';
        //cin.get(); 
     
        for (i = 0; i < MAX_LINE; i++)
        {
            ret = fscanf(f, "%d,%[^,],%[^,],%d,%[^,],%f,%f,%[^,],%[^\r]", &records_[i].serial_number, 
                records_[i].code_name, records_[i].name, &records_[i].number, records_[i].material,
                &records_[i].single_weight, &records_[i].total_weight, records_[i].material_code, records_[i].remark);//按行读取    
            if(records_[i].serial_number == 0)
                break;    
        }
        fclose(f);
        count = i;
        printf("csv line count %d\n", count);    
        for (i = 0; i < count; i++)
        {
            cout<<"i="<<i<<'\t'<<records_[i].serial_number<<'\t'<<records_[i].remark<<'\n';
        } 
      
        ofstream of("a.txt");
        //of.setf(ios::fixed);
        if(!of)
        {
            cout<<"不能打开目的文件\n";
            cin.get();
        }
        
        of<<"序号"<<'\t'<<"物料码"<<'\t'<<"名称"<<'\t'<<"代号"<<'\t'<<"材料"<<'\t'<<"数量"<<'\t'<<"         "<<'\t'<<"备注"<<'\n';
        for(i>0;i--;)//nnp:particle name//
        {
     
     
            of<<records_[i].serial_number<<'\t'<<records_[i].material_code<<'\t'<<records_[i].name<<'\t'<<records_[i].code_name<<'\t'<<records_[i].material<<'\t'<<records_[i].number<<'\t'<<"         "<<'\t'<<records_[i].remark<<'\n';
            
        }
        
        cout<<"Complete the calcula"<<'\n';
        of.close();
    
    
    
        f = fopen("a.txt", "rb");        
        if(!f)
            cout<<"fail to read file"<<'\n';
        //cin.get(); 
     
        char line[1024];
        fgets(line, 1024, f);
    
        for (i = 0; i < MAX_LINE; i++)
        {
            if(!fgets(line, 1024, f))break;
            ret = sscanf(line, "%d\t%[^\t]\t%[^\t]\t%[^\t]\t%[^\t]\t%d%s", &records_[i].serial_number, 
                records_[i].material_code, records_[i].name, records_[i].code_name, records_[i].material,
                &records_[i].number, records_[i].remark);
            if(ret == 6)records_[i].remark[0] = 0;
            else if(ret != 7)break;
        }
        fclose(f);
        count = i;
        printf("txt line count %d\n", count);    
        for (i = 0; i < count; i++)
        {
            cout<<records_[i].serial_number<<'\t'<<records_[i].material_code<<'\t'<<records_[i].name<<'\t'<<records_[i].code_name<<'\t'<<records_[i].material<<'\t'<<records_[i].number<<'\t'<<"         "<<'\t'<<records_[i].remark<<'\n';       
        } 
    
    
        cin.get();
        return 0;
    }
     
     
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(11条)

报告相同问题?

问题事件

  • 系统已结题 8月4日
  • 已采纳回答 7月27日
  • 修改了问题 7月27日
  • 修改了问题 7月27日
  • 展开全部