Làm thế nào để thay đổi cấu trúc file trong c?

446044147
446044147-B08
446044147-A38
446044217
446044217-B36
446044217-B52
446044217-B30
446044217-B42
446044217-B04
446044220
446044220-B36
446044220-A52
446044220-A30
446044220-B04
446044220-A42

Em có một file txt có định dạng như trên với 446044147- id của trạm dừng, 446044147-B08: id của trạm dừng và số hiệu của tuyến đi qua trạm dừng. Làm thế nào để em lấy được dữ liêu dưới dạng

446044147
B08    A38
446044217
B36  B52  B30  B42  B04

Mong các anh gợi ý ạ.

Xin lỗi mọi người về câu hỏi không rõ ràng. Mình xin rút kinh nghiệm lần sau. Vấn đề của mình là mình cần tạo một mảng struct với ID = 446044147 và một mảng string Key= [B08,A38]. Và mình không nghĩ ra cách viết ra vòng lặp thế nào để mà vòng lặp đó bắt đầu từ dòng bắt đầu chứa Key và dừng lại tại dòng cuối cùng chứa Key của ID đó. Code ví dụ:

#define MAXSTOP 50
#define MAX 200
typedef struct busStop {
    int id;//id:446044147
    char key[MAXSTOP][5];// B08,A38
}busStop;

busStop bs[MAX];

int main () {
    FILE *fin, *fout;
    if((fin = fopen("filein.txt", "r")) == NULL ){
        printf("Cannot open file");
        return -1;
    }
    else if((fout = fopen("fileout.txt", "w")) == NULL ){
        printf("Cannot open file");
        return -1;
    }
    int i = 0, j = 0;// counter
    char ch;
    int c1;
    while((ch = fputc(fin)) != EOF) {
        /*lay du lieu tu file input*/
        fscanf(fin, "%[^\n]", &bs[i].id);
        while(*dieu kien ket thuc vong lap*) {
            fscanf(fin, "%d-%[^\n]", &c1, &bs[i].key[j]);
            j++;
        }
    /*in ra file output*/ 
    fprintf(fout, "%d\n", bs[i].id);
    for(int k = 0; k < j; k++) {
        fprintf(fout, "%s ", bs[i].key[j]);
    }
    fprintf(fout,"\n\n");
}
fclose(fin);
fclose(fout);
return 0;

}
Và mình không nghĩ ra điều kiện kết thúc vòng lặp là gì

Dữ liệu bạn ra sao, bạn đọc y như thế, thực sự bạn muốn gì thì bạn phải nói cho rõ ràng ra. Còn nếu bạn xin code thì với cái này bạn nên học cho vững cách đọc file text.

1 Like

Ý bạn là chuyển đổi cấu trúc tập tin từ dạng thứ nhất sang dạng thứ hai?

Trước hết là bạn biết cách đọc/ghi từ tập tin văn bản.

Điều kiện kết thúc là id tiếp theo không bằng id trước đó.
Bạn nên đọc cả id khi ở trong vòng lặp, thay vì bỏ qua nó. Để tiện so sánh khi qua id kế tiếp.

1 Like

À, mình xem lại, nó chính là biến c1 bạn khai báo và gán bằng fscanf().

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?