weixin_43603037 2023-03-08 08:27 采纳率: 85.7%
浏览 47
已结题

C语言的补缺所缺失的数据

问题是补充缺失数据
每一秒会输出7行数据,从DDA 001---到DDA 007,但是总会有某一秒会缺失数据,数据的格式如下

我想要的是不是固定格式的代码(意思是从肯以后的数据开头未必是DDA 001---DDA 007,也有可能是DDA 008---DDA 0013),我想过一种代码模式,就是我点运行程序键,然后程序会提示我输入DDA的号码,比如是这样的(请输入DDA:),然后我就输入(DDA001 DDA002 DD003...DDA007) ,这样它就能补齐缺失的数据 ,但是我不知道怎么写,

例如缺失DDA 003的数据,我希望补上DDA 003 0 0 0 0 0 0 0。

数据就是以上内容。

  • 写回答

2条回答 默认 最新

  • a5156520 2023-03-09 15:13
    关注

    给指定文件添加输入的序号数据行,代码如下:

    
    #include <stdio.h>
    #include <string.h>
    
    // https://www.cnblogs.com/yanglike111/p/13186285.html
    int fun2(char *p)//将连续数字字符转换为整数
    {
        int x=0;
        while(*p && *p>='0' && *p<='9')
        {
            x=x*10+*p-'0';
            p++;
        }
        return x;
     } 
    int fun1(char *s,int *a) // 将字符串中第一个连续的数字字符串 转为对应的数字 
    {
        int x,n;
        char *p;
        n=0;p=s;
        while(*p)
        {
            while(*p &&(*p<'0'||*p>'9'))
                p++;
            if(*p)
            {
                *a=fun2(p);
                break;
            }
            while(*p>='0' && *p<='9')
                p++;
        }
        return *a;
    }
    
    
    int insertOneData(char datas[][256],int len,int num){
        
        char temp[256];
    // https://baike.baidu.com/link?url=4xkM2WPz-OQUCMjWcTdlDb1UnlqwPOF0nV2ONle1GGYCnq-7KREkLnRGCJ7rsw8zBWbJYBnS5OLdGMimAGc6FkY9nQptKCNAChTMgvn3WxW    
        sprintf(temp,"< DDA %03d 0 0 0 0 0 0\n",num); // 要添加的数据 
    //    printf("insert temp=%s\n",temp);
        
        int i,j,num1=-1,num2=-1;
        fun1(datas[0],&num1);
        if(num<num1){  //要插入的数据序号小于所有序号 
                
            for(int t=len;t>i;t--){
                strcpy(datas[t],datas[t-1]);
            }
            strcpy(datas[i],temp);
            return 1;
        }
        
        fun1(datas[len-1],&num1);
        if(num>num1){  // 要插入的序号在所有序号之后 
            
        
            strcpy(datas[len],temp);
            return 1;
        }
            
             
        for(i=0;i<len;i++){  // 要插入的序号在两个序号之间 
            
            fun1(datas[i],&num1);
            fun1(datas[i+1],&num2);
            if(num>num1&&num<num2){
                
                for(int t=len;t>i+1;t--){
                    strcpy(datas[t],datas[t-1]);
                }
                strcpy(datas[i+1],temp);
                break;
            }
            
        }
        
        return 1;
        
    }
    
    int main(void){
        
        int num[350000];
        int i=0;
        
        printf("请输入要补充的序列号:");
        while(scanf("%d",&num[i])!=EOF){           
            i++;        
        }
    //    printf("i=%d\n",i);
        
        FILE * fp = fopen("20230309data.txt","r");
        if(fp==NULL){
            printf("打开文件失败!\n");
            return -1;
        }
        FILE * fp2 = fopen("20230309data-result.txt","w");
        if(fp2==NULL){
            printf("打开文件失败  !\n");
            return -1;
        }
        char datas[100][256];
        char temp[256];
        int n=-1;
        int j=0;
        
        while(feof(fp)==0){
            
            // https://baike.baidu.com/item/fgets/10942211?fr=aladdin
            char * read = fgets(temp,256,fp); // 第一行 
            
            //printf("temp1=%s\n",temp);
            if(read!=NULL){
                fputs(temp,fp2);   
                
                fgets(temp,256,fp);  // 第二行 
                fputs(temp,fp2); 
                
                int row;
                fgets(temp,256,fp); // 第三行的数字
                //printf("temp3=%s\n",temp); 
                fputs(temp,fp2);  // 此处的数字没有修改为更新新增加条数 
                fun1(temp,&n); 
            //    printf("n=%d\n",n);
            
                 
                
                for(j=0;j<n;j++){  // 读取n行 
                    fgets(datas[j],256,fp);
                //    printf("datas[%d]=%s\n",j,datas[j]);
                }
                // 最后一行数据加个换行符 
                //datas[n-1][strlen(datas[n-1])] ='\n'; 
                //datas[n-1][strlen(datas[n-1])+1] ='\0';
                
                int k;
                int len=n;
                // 将读取的n行数据,添加要插入的序号数据到二维字符数组datas中 
                for(k=0;k<i;k++){
                    int in = insertOneData(datas,len,num[k]);
                    if(in==1){
                        len++;
                    }
                }
                
                // 将插入的数据的二维数组datas中的数据写入文件 
                for(k=0;k<len;k++){
                    fputs(datas[k],fp2);
                }    
                
                
                
            }else{
                break;
            }
        }    
        fclose(fp); 
        fclose(fp2);
        
        
        return 0;
        
    } 
    

    20230309data.txt(测试用数据文件内容):

    >CLOCKMEASURES COM2 0 0.0 APPROXIMATE 0 1.000 00000000 0 1                     
    < 209804000000000 0.000 0.000 0 1
    < 4
    < DDA 002 43.04 20972708.15 20972708.354 -168.820 5800 1575420000 18105da4
    < DDA 003 26.18 20892411.42 20892410.244 -168.841 6678680 1176450000 01d05e24
    < DDA 005 55.63 20892410.61 20892410.506 -168.825 6771600 1575420000 08105dc4
    < DDA 006 55.63 20892410.61 20892410.506 -168.825 6771600 1575420000 08105dc4
    >CLOCKMEASURES COM2 0 0.0 APPROXIMATE 0 1.000 00000000 0 1                     
    < 209804000000000 0.000 0.000 0 1
    < 5
    < DDA 002 43.04 20972708.15 20972708.354 -168.820 5800 1575420000 18105da4
    < DDA 003 26.18 20892411.42 20892410.244 -168.841 6678680 1176450000 01d05e24
    < DDA 005 55.63 20892410.61 20892410.506 -168.825 6771600 1575420000 08105dc4
    < DDA 006 55.63 20892410.61 20892410.506 -168.825 6771600 1575420000 08105dc4
    < DDA 007 55.63 20892410.61 20892410.506 -168.825 6771600 1575420000 08105dc4
    >CLOCKMEASURES COM2 0 0.0 APPROXIMATE 0 1.000 00000000 0 1                     
    < 209804000000000 0.000 0.000 0 1
    < 3
    < DDA 002 43.04 20972708.15 20972708.354 -168.820 5800 1575420000 18105da4
    < DDA 003 26.18 20892411.42 20892410.244 -168.841 6678680 1176450000 01d05e24
    < DDA 005 55.63 20892410.61 20892410.506 -168.825 6771600 1575420000 08105dc4
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 3月27日
  • 已采纳回答 3月19日
  • 创建了问题 3月8日

悬赏问题

  • ¥15 找一个网络防御专家,外包的
  • ¥100 能不能让两张不同的图片md5值一样,(有尝)
  • ¥15 informer代码训练自己的数据集,改参数怎么改
  • ¥15 请看一下,学校实验要求,我需要具体代码
  • ¥50 pc微信3.6.0.18不能登陆 有偿解决问题
  • ¥20 MATLAB绘制两隐函数曲面的交线
  • ¥15 求TYPCE母转母转接头24PIN线路板图
  • ¥100 国外网络搭建,有偿交流
  • ¥15 高价求中通快递查询接口
  • ¥15 解决一个加好友限制问题 或者有好的方案