使用C语言修改文件中间的数据

时间:2017-10-31 12:15:10

标签: c file file-handling

我正在寻找您运行此代码的宝贵建议。

此代码的目标
  - 修改输入文件中间的数据

目标的详细说明
  - 通过字符串搜索找到元素部分
  - 在Element部分中,读取每行的第一列,并找到用户要求的start_value和end_value   - 在start_value和end_value行之间,必须删除最后一行并输入用户给出的数字。

此代码中的问题   - 如果我运行此代码,则特定部分不会在输出文件中打印。

提前谢谢。

输入文件

28641 1.09500000000000e+003 -1.14500000000000e+003 1.00333333333333e+003  
28642 1.09500000000000e+003 -1.14500000000000e+003 8.60000000000000e+002  
28643 1.09500000000000e+003 -1.14500000000000e+003 7.16666666666667e+002  
28644 1.09500000000000e+003 -1.14500000000000e+003 5.73333333333333e+002    
28645 1.09500000000000e+003 -1.14500000000000e+003 4.30000000000000e+002    
28646 1.09500000000000e+003 -1.14500000000000e+003 2.86666666666667e+002  
28647 1.09500000000000e+003 -1.14500000000000e+003 1.43333333333334e+002  
28648 1.09500000000000e+003 -1.14500000000000e+003 0.00000000000000e+000  
END_COORDINATES   
ELEMENTS 
1  1  2  3  4  5  6  7  8   1  
2  4  3  9  10 8  7  11 12  1  
3  10 9  13 14 12 11 15 16  1  
4  14 13 17 18 16 15 19 20  1  
5  18 17 21 22 20 19 23 24  1  
6  22 21 25 26 24 23 27 28  1  
7  26 25 29 30 28 27 31 32  1  
8  30 29 33 34 32 31 35 36  1  
9  34 33 37 38 36 35 39 40  1  
10  38 37 41 42 40 39 43 44  1  
11  42 41 45 46 44 43 47 48  1  
12  46 45 49 50 48 47 51 52  1  
13  50 49 53 54 52 51 55 56  1  
14  54 53 57 58 56 55 59 60  1  
15  58 57 61 62 60 59 63 64  1  
16  62 61 65 66 64 63 67 68  1  
17  66 65 69 70 68 67 71 72  1  
18  70 69 73 74 72 71 75 76  1  
19  74 73 77 78 76 75 79 80  1    
20  78 77 81 82 80 79 83 84  1  
21  82 81 85 86 84 83 87 88  1  

在预期的输出文件中 - 在Sl.no 4-14的Element部分下,最后一行从1变为2 - 这是最终的预期结果

我的代码附在下面,以供你的善意

预期的输出文件

28641 1.09500000000000e+003 -1.14500000000000e+003 1.00333333333333e+003  
28642 1.09500000000000e+003 -1.14500000000000e+003 8.60000000000000e+002  
28643 1.09500000000000e+003 -1.14500000000000e+003 7.16666666666667e+002  
28644 1.09500000000000e+003 -1.14500000000000e+003 5.73333333333333e+002    
28645 1.09500000000000e+003 -1.14500000000000e+003 4.30000000000000e+002    
28646 1.09500000000000e+003 -1.14500000000000e+003 2.86666666666667e+002  
28647 1.09500000000000e+003 -1.14500000000000e+003 1.43333333333334e+002  
28648 1.09500000000000e+003 -1.14500000000000e+003 0.00000000000000e+000  
END_COORDINATES   
ELEMENTS 
1  1  2  3  4  5  6  7  8   1  
2  4  3  9  10 8  7  11 12  1  
3  10 9  13 14 12 11 15 16  1  
4  14 13 17 18 16 15 19 20  2  
5  18 17 21 22 20 19 23 24  2  
6  22 21 25 26 24 23 27 28  2  
7  26 25 29 30 28 27 31 32  2  
8  30 29 33 34 32 31 35 36  2  
9  34 33 37 38 36 35 39 40  2  
10  38 37 41 42 40 39 43 44  2  
11  42 41 45 46 44 43 47 48  2  
12  46 45 49 50 48 47 51 52  2  
13  50 49 53 54 52 51 55 56  2  
14  54 53 57 58 56 55 59 60  2  
15  58 57 61 62 60 59 63 64  1  
16  62 61 65 66 64 63 67 68  1  
17  66 65 69 70 68 67 71 72  1  
18  70 69 73 74 72 71 75 76  1  
19  74 73 77 78 76 75 79 80  1    
20  78 77 81 82 80 79 83 84  1  
21  82 81 85 86 84 83 87 88  1  

代码

int Extract_Node_value( char *Elements, char *To_Element_set_list)
{
    char line[256];
    char line1[256];
    int line_size;
    int Index, Index1, i;

    int START_VALUE = 4;
    int STOP_VALUE = 15;

    int word;
    int fword;

    if (!file1) {
        perror("fopen");
        exit(EXIT_FAILURE);
    }

    while(fgets(line, sizeof(line),file1)) {

        if (!strstr(line, To_Find_node)){
            continue;
        }
        printf("success \n");

        while (fscanf(file1, "%s%*[^\n]", fword)==1){
            printf("success 2 \n");
            if (fword >= START_VALUE && fword <=STOP_VALUE){

                if (!fgets(line, sizeof line,file1)) {
                    return 3;
                }

                while(fgets(line, sizeof line,file1)) {

                    // if (strstr(line, To_Element_set_list)){
                    //   return 0;
                    // }

                    line_size = strlen(line)-1;
                    Index1 = 0;

                    int Count = 3;
                    for( Index=line_size; Count && Index ; Index--) {

                        // if( line[Index] != ' ' ) {
                        //   continue;
                        //}

                        for( ;line[Index]== ' '; ){
                        Index--;

                        }
                        Count--;
                    }

                    line[Index+1] = '\0';
                    line[Index+2] = '\0 ';

                    printf("%s %d \n", line, Element_id);
                    fprintf(out1, " %s %d \n", line, Element_id);
                    BufferIndex = Index1;

                }
            }
        }
    }

  return 0;
} 

0 个答案:

没有答案