2014-12-03 7 views
0

У меня есть текстовый файл, который выглядит следующим образом:копирование данных из текстового файла в другой

;3;untyped;31.1948;29.917 
;3;untyped;31.195;29.9168 
;3;untyped;31.195;3;29.9167 
;3;untyped;31.1955;29.9166 

Я хочу, чтобы скопировать его в другой текстовый файл, который выглядит следующим образом:

number_of_lines lat1 long1 t1 lat2 long2 t2 lat3 long3 t3..... 

где t начинается с 1 и увеличивается на 1 каждый раз.

Это мой код:

#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 

int main() 
{ 
    FILE *file2 = fopen("out.txt", "w"); 
    int NOL=1; 
    char ch; 
    FILE *file1 = fopen("in.txt", "r");  
    while((ch=fgetc(file1))!=EOF)     //loop to find out how many lines are in the text file 
    { 
     if (ch=='\n') { NOL++; } 
    } 
    printf("number of lines = %d \n",NOL); 
    fclose(file1); 

    char line[100]; 
    int inc = 1; 
    FILE *file3 = fopen("in.txt", "r"); 
    fprintf(file2,"%d ",NOL); 
    for(int i=0;i<NOL;i++) 
    { 
     fscanf(file3,"%s\n",line);  
     char *trash1 = strtok(line, ";");  //ignoring the first part 
     printf("%s\n",trash1); 

     char *trash2 = strtok(NULL, ";");  //ignoring the second part 
     printf("%s\n",trash2); 

     char *lat = strtok(NULL, ";"); 
     float lat_f = atof(lat);    //storing the lat 
     printf("%s\n",lat); 

     char *lon = strtok(NULL, ";"); 
     float lon_f = atof(lon);    //storing the long 
     printf("%s\n",lon); 

     fprintf(file2,"%f %f %d ",lat_f,lon_f,inc); //printing the values to the output text file 
     inc++; 
    } 
    fclose (file3); 
    fclose (file2);  
} 

Когда я запускаю мой код, некоторые из скопированных значений не копируются правильно, как показано ниже

4 31.194799 29.917000 1 31.195000 29.916800 2 31.195000 **3.000000** 3 31.195499 29.916599 4 

Почему это происходит? Что-то не так с кодом? Как я могу это исправить.

+0

, пожалуйста, всегда проверяйте результат fopen() –

+1

Работает как ожидается здесь. Является ли дополнительный «3;» во входном файле опечаткой? –

+0

Я согласен с @MichaelWalz, дополнительным 3; это проблема. Вы можете проверить, что каждая строка имеет правильное количество значений ... если нет, вы могли бы игнорировать или помечать строку как недействительную? –

ответ

1

ваша третья линия имеет дополнительный ;, поэтому выход правильно

+0

О, Боже мой! Мне очень жаль, что вы разместили этот вопрос lol –

1

В вашем примере 4 строки, строка 3 содержит дополнительные данные в поле 4 3;, так что это, где ваша «неожиданный» 3 откуда.

+0

Да, это была опечатка: S. Очень жаль это –