01/10/2018, 15:48
Hỏi về chỉnh sửa thông tin trong file csv liên quan đến fseek và gets
Sao em làm cái hàm chỉnh sửa thông tin độc giả trong file csv mà nó cứ bị sai vị trí nên nó bị ghi đè tùm lum lên là sao vậy các bác @@, mong các bác có kinh nghiệm chỉ giáo với ạ, nó liên quan đến đồ án của em nên mong các bác dành chút thời gian ạ
void ChinhSuaThongTin()
{
fflush(stdin);
DocGia D;
FILE *pFile = fopen("DocGia.csv", "r+");
if (pFile == NULL)
printf("ERROR!
");
char ID[10];
printf("Nhap Ma Doc Gia can chinh sua:");
gets(ID);
int check = 0;
int count = 0;
do
{
char buff[1024];
if (!feof(pFile))
{
fgets(buff, sizeof(buff), pFile);
char *token = strtok(buff, ",");
while (token != NULL&&check != 1)
{
count++;
if (strcmp(ID, token) == 0)
{
//strcpy(buff, "0");
fflush(stdin);
D.ID = new char[10];
printf("Nhap Ma Doc Gia moi:");
gets(D.ID);
D.Hoten = new char[20];
printf("Nhap Ho Ten Doc Gia moi:");
gets(D.Hoten);
D.CMND = new char[9];
printf("Nhap CMND moi:");
gets(D.CMND);
D.Ngaysinh = new char[20];
printf("Nhap Ngay thang nam sinh moi:");
gets(D.Ngaysinh);
D.Gioitinh = new char[10];
printf("Nhap Gioi tinh moi:");
gets(D.Gioitinh);
D.Email = new char[20];
printf("Nhap Email moi:");
gets(D.Email);
D.Diachi = new char[50];
printf("Nhap Dia chi moi:");
gets(D.Diachi);
D.Ngaylapthe = new char[20];
printf("Nhap Ngay lap the moi:");
gets(D.Ngaylapthe);
D.Ngayhethan = new char[20];
printf("Nhap Ngay het han the moi(48 thang sau khi lap the):");
gets(D.Ngayhethan);
fflush(stdin);
fseek(pFile,ftell(pFile)-sizeof(D), 0);
fprintf(pFile, "%s,%s,%s,%s,%s,%s,%s,%s,%s
", D.ID, D.Hoten, D.CMND, D.Ngaysinh, D.Gioitinh, D.Email, D.Diachi, D.Ngaylapthe, D.Ngayhethan);
check = 1;
fclose(pFile);
break;
}
token = strtok(NULL, ",");
}
if (check == 1)
break;
}
} while (!feof(pFile));
fclose(pFile);
Bài liên quan
csv là dạng text mà bạn fseek là làm binary rồi.
v giờ dùng gì để thay đổi đây bác
(Binary) Newbie hay serialise hẳn một struct, nhưng khi đổi máy thì đọc lên sẽ bị sai endian và padding, vì vậy phải tạo ra format riêng.
(Text) csv là text rồi bạn nên chắc không dùng được.
giờ e muốn làm file csv ấy, mà chỉ cần làm sao để thay đổi thông tin của 1 thằng tìm được thì làm sao hả bác
Hi Đạt Vũ.
Với file nhỏ bạn tạo cấu trúc dữ liệu cho mỗi dòng rồi load hết vào ram không nên thao tác trực tiếp trên file như vậy.
là sao bác, em không hiểu ý bác