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);
rogp10 viết 17:55 ngày 01/10/2018

csv là dạng text mà bạn fseek là làm binary rồi.

Đạt Vũ viết 17:57 ngày 01/10/2018

v giờ dùng gì để thay đổi đây bác

rogp10 viết 17:59 ngày 01/10/2018

(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.

Đạt Vũ viết 17:50 ngày 01/10/2018

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

Tao Không Ngu. viết 17:53 ngày 01/10/2018

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.

Đạt Vũ viết 17:53 ngày 01/10/2018

là sao bác, em không hiểu ý bác

Bài liên quan
0