Advertisement
huncrys

zh02-1

Mar 20th, 2013
19
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.77 KB | None | 0 0
  1. #include <stdio.h>
  2.  
  3. struct adat {
  4.     short int   azonosito;      /*sorszam*/
  5.     char        szoveg[80];     /*egy sornyi szoveg*/
  6.     int         hossz;          /*az aktualis sor hossza*/
  7. };
  8.  
  9. int readline(FILE* fp, char* buff) {
  10.     char c;
  11.     int i = 0;
  12.     // Olvasas a fajlbol EOF (fajl vege) vagy \n (sor vege) karakterig
  13.     while ((c = fgetc(fp)) != EOF && c != '\n') {
  14.         if (i >= 79) continue; // Hogy ne probaljon meg bele tobbet irni mint 79 karaktert (kell egy hely a vegere a null karakternek), de megis vegig olvassa a sort, mert kulonben szar lesz.
  15.         buff[i++] = c;
  16.     }
  17.  
  18.     buff[i] = '\0';
  19.  
  20.     return i;
  21. }
  22.  
  23. int writeline(FILE* fp, struct adat *a) {
  24.     fwrite(a, sizeof(*a), 1, fp);
  25. }
  26.  
  27. int main() {
  28.     struct adat a;
  29.  
  30.     FILE *fp1, *fp2;
  31.     // forrasfajl megnyitasra olvasasra
  32.     if (!(fp1 = fopen(__FILE__, "r"))) {
  33.         printf("Nem sikerult megnyitni a forras fajlt olvasasra.\n");
  34.         return 0;
  35.     }
  36.     // Celfajl megnyitasa binary-safe irasra/olvasasra
  37.     else if (!(fp2 = fopen("teszt.bin", "w+b"))) {
  38.         printf("Nem sikerult megnyitni a cel fajlt binary-safe irasra/olvasasra.\n");
  39.         return 0;
  40.     }
  41.  
  42.     // Forrasfajl sorainak beolvasasa a strukturaba es kiiratasa a celfajlba
  43.     int i = 0;
  44.     do {
  45.         a.azonosito = ++i;
  46.         a.hossz = readline(fp1, a.szoveg); // beolvasas fuggvennyel
  47.         //printf("%02d|%2d|%s\n", a.azonosito, a.hossz, a.szoveg);
  48.  
  49.         writeline(fp2, &a); // kiiratas a celfajlba
  50.     }
  51.     while (!feof(fp1));
  52.  
  53.     /* EZ CSAK TESZT MIATT KELL */
  54.     rewind(fp2);
  55.  
  56.     while (fread(&a, sizeof(a), 1, fp2) == 1)
  57.         printf("%02d|%2d|%s\n", a.azonosito, a.hossz, a.szoveg);
  58.     /* ------------------------ */
  59.  
  60.     fclose(fp1);
  61.     fclose(fp2);
  62.  
  63.     return 0;
  64. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement