читать данные из файла - PullRequest
0 голосов
/ 13 июня 2011

Как читать данные из файла в структуру?У меня есть структура типа

struct data
{
    char name[20];
    int age;
};

В файле student_info.txt У меня есть

   ravi 12 raghu 14 datta 13 sujay 10 rajesh 13

и так далее со многими другими именами с возрастами.Как я могу прочитать это из файла в данные структуры?

Чтение этого имени и возраста должно быть циклом, т. Е. В первый раз я прочитаю 'ravi' и '12', затем я должен упаковать эти данные вструктура и передаст структуру функции, как только структура будет установлена.Он должен вернуться к файлу и прочитать «raghu» и «14» снова упаковать структуру с этими данными, и это должно быть в цикле, пока я не прочитал все данные из файла

Может кто-нибудь сказать, пожалуйстакак реализовать логику?

Ответы [ 2 ]

1 голос
/ 13 июня 2011

Подход такой:

  1. Создать экземпляр массива вашей структуры, указатель файла для доступа к файлу и переменную счетчика
  2. Открыть поток файла с помощью файлауказатель - проверьте, что он был успешно открыт.Указатель файла будет указывать на NULL, если fopen () не удалось
  3. Считать данные в массив struct с помощью цикла.fscanf () возвращает количество успешных «совпадений» со строкой формата - здесь будет 2 (используйте это для условия цикла)
  4. Закройте файл

Примеркод:

#include <stdio.h>

#define FILENAME "student_info.txt"
#define MAX_NO_RECORDS 50

struct data
{
char name[20];
int age;
};

int main(void)
{
    /* Declare an array of structs to hold information */
    struct data StudentInfo[MAX_NO_RECORDS];
    /* Declare a file pointer to access file */
    FILE *s_info;
    int student_no = 0; /* holds no. of student records loaded */

    /* open the file for reading */
    s_info = fopen(FILENAME, "r");
    /* Check if an error has occured - exit if so */
    if(s_info == NULL)
    {
        printf("File %s could not be found or opened - Exiting...\n", FILENAME);
        return -1;
    }

    printf("Loading data...\n");
    while(fscanf(s_info, "%19s %i", StudentInfo[student_no].name, &StudentInfo[student_no].age) == 2)
    {
        /* refer to records with index no. (0 to (1 - no. of records))
            individual members of structure can be accessed with . operator */
        printf("%i\t%-19s %3i\n", student_no, StudentInfo[student_no].name, StudentInfo[student_no].age);
        student_no++;
    }
    /* after the loop, student_no holds no of records */
    printf("Total no. of records = %i\n", student_no);
    /* Close the file stream after you've finished with it */
    fclose(s_info);

    return 0;
}
0 голосов
/ 13 июня 2011

Вам просто нужно прочитать данные из этого файла и разбить эту строку на основе некоторых критериев. поскольку ваш файл не отформатирован должным образом, вам будет сложно проанализировать данные.

В вашем текущем сценарии ваш файл содержит только имя и цифру, которые вы можете легко проанализировать, обнаружив пробел в вашей строке. но это может привести к проблеме, если любое из ваших имен содержит пробел.

Прежде всего разделите каждую пару слов каким-либо символом, например: или; или табуляция или разрыв строки. затем между каждой отдельной строкой разделите ее на пробел и затем прочитайте все содержимое файла в массиве char, затем из этого массива попытайтесь найти тот специальный символ, который указывает на одну запись. Разделите каждую запись в отдельном массиве символов, затем снова для каждого сгенерированного массива, а затем разделите ее на основе символьного пространства и загрузите в вашей структуре

Это только для пояснения, оригинальная реализация может отличаться,

Student std = {first string, second integer};

Надеюсь, этот документ решит вашу проблему http://www.softwareprojects.com/resources//t-1636goto.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...