Язык C: поиск в текстовом файле слова и сохранение значения в переменных типа int и flout. - PullRequest
0 голосов
/ 12 декабря 2018

Например, текстовый файл (vars.txt) содержит:

var1
10
var2
3.54
var3
10110

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

char cBuffer[256];
FILE *pSrcFile;
pSrcFile = fopen("vars.txt","r");
while( (fgets( cBuffer, 256 , pSrcFile)) != NULL )
{
    if( strcmp( cBuffer, "var1" ) != NULL )
    {
        sscanf( pSrcFile, "%d" , &var1 );
        printf("var1 is found= %d",var1);
        break;
    }
}

Как я могу преобразовать и сохранить строки текстового файла в переменные типа int, flout и двоичного типа?

Другими словами,Я хочу найти текстовый файл, чтобы найти «var1», а затем сохранить следующую строку (значение «var1») в целочисленной переменной и повторить это, чтобы найти и сохранить значение «var2» в переменной с плавающей точкой и «var3»."в двоичную переменную и т. д.

Ответы [ 3 ]

0 голосов
/ 12 декабря 2018

Я изменил вашу программу для работы, проверил и понял, чего не хватало.

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

int main()
{

 char cBuffer[256]={'\0'};
 FILE *pSrcFile;

 pSrcFile = fopen("vars.txt","r");
 int var1;
 while((fgets(cBuffer, 256 , pSrcFile)) != NULL )
 {
    if(strncmp(cBuffer, "var1", sizeof("var1")-1 ) == 0 )
     {
       fscanf(pSrcFile, "%d" , &var1 );
       printf("var1 is found= %d\n",var1);
       break;
     }
  }

}

в основном добавил strncmp (), чтобы избежать новой строки, если она есть в bcBuffer, иначене будет равно, поэтому, если () не будет истинным, это не стандартный способ программирования, а грубый способ заставить его работать (все это не может быть объяснено здесь).

0 голосов
/ 13 декабря 2018

Наконец-то я нашел решение проблемы с этим кодом (спасибо другим ответам).Код ищет слово и возвращает следующее значение после слова.

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

int search_word_int( char *word , FILE *file , int *step )
{
    fseek(file, 0, SEEK_SET);
    char dummy[strlen(word)+1];
    int step_ = step;
    int variable = 0;
    while((fgets(dummy, strlen(word)+1 , file)) != NULL )
    {
        if(strncmp(dummy, word, strlen(word)+1 ) == 0 )
        {
            for (int i = 0 ; i < step_ + 1 ; i++)
                fscanf(file, "%d" , &variable );
            printf("%s = %d\n",word,variable);
            break;
        }
    }
    return(variable);
}

float   search_word_float( char *word , FILE *file , int *step )
{
    fseek(file, 0, SEEK_SET);
    char dummy[strlen(word)+1];
    int     step_ = step;
    float   variable = 0;
    while( (fgets( dummy , strlen(word)+1 , file )) != NULL )
    {
        if( strncmp(dummy, word, strlen(word)+1 ) == 0 )
        {
            for (int i = 0 ; i < step_ + 1 ; i++)
                fscanf( file , "%f" , &variable );
            printf("%s = %f\n",word,variable);
            break;
        }
    }
    return(variable);
}

int main()
{
    FILE    *file;
    file = fopen("vars.txt","r");
    int var1 = search_word_int( "var1" , file , 1 );
    float var2 = search_word_float( "var2" , file , 2 );
    fclose(file);
    return(0);
}

Если текстовый файл("vars.txt"):

var1
10
var2     2.3
4.5

Тогда результат:

var1 = 10
var2 = 4.5

Пробелы, символы новой строки и табуляции игнорируются.

0 голосов
/ 12 декабря 2018

Это пример того, как читать, писать файл: // Чтение:

FILE *f1, *f2;
f1 = fopen("IN.INP","r");
fscanf(f1,"%d",&vars);    
fclose(f1);
//Write:
f2 = fopen("OUT.OUT", "w");
fprintf(f2, "%d",vars);
fclose(f2);

Я не уверен, правильно ли я понимаю ваш вопрос "Как конвертировать .txt в int,float, бинарный тип vars "или нет.Но вот как:

char a = 10;
int b = (int) a;

Но если вы просто хотите прочитать значение .txt в int, float, тогда просто используйте fscanf (f1, "% d", & vars); // d для int

...