visoft

Pregatire 12.11 Citire din fisier si parsare de linii

Nov 12th, 2020
555
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. // o tabela de int-uri
  4. // o tabela de tabele de int-uri
  5. // numarul de elemente din fiecare vector
  6. // numarul de vectori
  7.  
  8. typedef struct {
  9.     int numar_de_vectori; // numarul de vectori
  10.     int *lungime_individuala; // numarul de elemente din fiecare vector
  11.     int **vectori; // o tabela de tabele de int-uri
  12. } TabelMare;
  13.  
  14. #define MAX_LINE_LEN 10000
  15.  
  16. int main() {
  17.     // 3 4 2
  18.     // 10 11
  19.     // 4
  20.     TabelMare tab;
  21.     tab.numar_de_vectori = 3;
  22.     tab.lungime_individuala = (int *) calloc(sizeof(int), tab.numar_de_vectori);
  23.     tab.vectori = (int **) calloc(sizeof(int *), tab.numar_de_vectori);
  24.  
  25.     tab.lungime_individuala[0] = 3;
  26.     tab.lungime_individuala[1] = 2;
  27.     tab.lungime_individuala[2] = 1;
  28.  
  29.     for (int i = 0; i < tab.numar_de_vectori; ++i) {
  30.         tab.vectori[i] = (int *) calloc(sizeof(int), tab.lungime_individuala[i]);
  31.     }
  32.  
  33.     tab.vectori[0][0] = 3;
  34.     tab.vectori[0][1] = 4;
  35.     tab.vectori[0][2] = 2;
  36.     tab.vectori[1][0] = 10;
  37.     tab.vectori[1][1] = 11;
  38.     tab.vectori[2][0] = 4;
  39.  
  40.     FILE *f = fopen("../in.txt", "r");
  41.     if (f == NULL) {
  42.         return 1;
  43.     }
  44.     int rez_fgets, nr_de_specificatori_cititi, nr_de_caractere_citite, nr_citit;
  45.     int locatie_curenta_in_linie;
  46.     char *linie = (char *) calloc(sizeof(char), MAX_LINE_LEN);
  47.     while (1) {
  48.         rez_fgets = fgets(linie, MAX_LINE_LEN, f);
  49.         if (rez_fgets == NULL || rez_fgets == EOF) {
  50.             break;
  51.         }
  52. //        printf("-:%s", linie);
  53.         locatie_curenta_in_linie = 0;
  54.         nr_de_specificatori_cititi = 1;
  55.         while (nr_de_specificatori_cititi == 1) {
  56.             nr_de_specificatori_cititi = sscanf(linie + locatie_curenta_in_linie, "%d%n",
  57.                                                 &nr_citit, &nr_de_caractere_citite);
  58.             if (nr_de_specificatori_cititi == 1) {
  59.                 printf("%d ", nr_citit);
  60.                 // mut pointerul dupa caracterele citite
  61.                 locatie_curenta_in_linie += nr_de_caractere_citite;
  62.             }
  63.         }
  64.         printf("\nNEW LINE\n");
  65.     }
  66.     free(linie);
  67.  
  68. //    for (int i = 0; i < tab.numar_de_vectori; ++i) {
  69. //        for (int j = 0; j <tab.lungime_individuala[i]; ++j) {
  70. //            printf("%d ", tab.vectori[i][j]);
  71. //        }
  72. //        printf("\n");
  73. //    }
  74.  
  75.     return 0;
  76. }
  77.  
  78.  
RAW Paste Data