cari string dari file dan simpan di struct menggunakan c
saya memiliki struktur seperti ini:
struct profile {
char firstName[15], lastName[15];
int age, phoneNo;
};
dan saya telah menulis kode untuk menyimpan data teks dari struktur ini ke dalam file teks, seperti:
int main()
{
FILE* fPtr;
fPtr = fopen("profile.txt", "a");
printf("\n\nPlease enter your details:");
struct profile c;
printf("\n\nEnter your first name: ");
gets(c.firstName);
printf("\nEnter your last name: ");
gets(c.lastName);
printf("\nEnter your age: ");
scanf("%d", &c.age);
printf("Enter your phone number: ");
scanf("%d", &c.phoneNo);
fprintf(fPtr, "%s#%s#%dy#%d#\n", c.firstName, c.lastName, c.age, c.phoneNo);
fclose(fPtr);
return 0;
}
kode di atas akan menyimpan input data ke dalam struct menjadi file teks string, setiap string adalah satu profil, dan setiap nilai dipisahkan oleh '#', seperti di bawah ini:
John#Doe#35y#0123456789#
Mary Ann#Brown#20y#034352421#
Nicholas#McDonald#15y#0987654321#
saya ingin tahu apakah ada cara untuk mencari nama / usia / telepon tertentuTidak dari file teks, pilih seluruh string dari profil yang sesuai dan masukkan kembali setiap nilai ke dalam struktur seperti di atas sehingga saya dapat menampilkannya ? Saya telah memisahkan setiap nilai dengan '#' sehingga program dapat menggunakan # untuk membedakan antara setiap nilai ketika membaca dari file tetapi saya tidak yakin bagaimana saya dapat memisahkannya ketika saya membaca data. yang harus saya gunakan fgets? Saya baru mengenal C jadi saya akan menghargai jika seseorang bisa menjelaskannya kepada saya bagaimana.
Jawaban
Ini bukan yang Anda cari, tetapi membantu Anda mulai menggunakan fgetsdan cara mencari entri (sekarang hanya string).
#include <stdio.h>
#include <string.h>
#define MYFILE "profile.txt"
#define BUFFER_SIZE 50
int main()
{
char nametoSearch[BUFFER_SIZE];
char Names[BUFFER_SIZE];
FILE* fPtr;
if (fPtr = fopen(MYFILE, "r"))
{
// flag to check whether record found or not
int fountRecord = 0;
printf("Enter name to search : ");
//use fgets if you are reading input with spaces like John Doe
fgets(nametoSearch, BUFFER_SIZE, stdin);
//remove the '\n' at the end of string
nametoSearch[strlen(nametoSearch)-1] = '\0';
while (fgets(Names, BUFFER_SIZE, fPtr))
{
// strstr returns start address of substring in case if present
if(strstr(Names,nametoSearch))
{
printf("%s\n", Names);
fountRecord = 1;
}
}
if ( !fountRecord )
printf("%s cannot be found\n",nametoSearch);
fclose(fPtr);
}
else
{
printf("file %s cannot be opened\n", MYFILE );
}
return 0;
}