Zapisanie pliku do zmiennej

0

Witam, aktualnie potrzebuje zapisac caly plik do zmiennej, tablice? listy? jakos pomysl? zaden mój pomysł nie wypalił.. plik zczytuje następująco:

   while (fgets(line, sizeof(line), fp) != NULL) {
        for (int i = 0;  i < strlen(line); i++) {
            if (line[i] == ':' || line[i] == '-') {
                line[i] = ' ';
            }
        }
        sscanf(line,"%d %d %d %d %s %s %s %s %s %d \n",&start_time_godzina, &start_time_minuta, &end_time_godzina,
              &end_time_minuta,day_name, grupa, nazwisko,przedmiot, &klasa_k);
        printf("%d:%d %d:%d %s %s %s %s Klasa: %d \n",start_time_godzina, start_time_minuta, end_time_godzina,
               end_time_minuta,day_name,grupa,nazwisko,przedmiot,klasa_k);
    }
0

Podaj może więcej informacji.

  • Wszystkie linie są tej samej długości?
  • Jak duży jest ten plik?
  • Plik ma stałą ilość linii?
  • Co później będziesz z odczytanymi wartościami robił?
0

Plik wygląda tak: jest to przykładowy plik i może być różnych rozmiarów lecz powinien zawsze mieć taki sam format. Jeżeli chodzi o to co będę z nim chcial robić to będę chciał przekazać wartości do innej funkcji bo muszę utworzyć nowe pliki dla nazwiska grupy oraz sali i je wypełnić danymi. Tylko mam problem z zapisaniem jakoś tego do jednej zmiennej która mogę przekazać.

0

Przypuszczam że będziesz potrzebował co najmniej struktury, albo i klasy. Struktury służą do przechowywania pod jedną nazwą wielu zmiennych różnych typów (jak najbardziej możesz strukturę do funkcji jako argument wysłać), klasy mogą mieć dodatkowo własne funkcje.

0

Jeżeli chodzi o strukturę to chyba będę potrzebował jeszcze tablice tak? I zrobić tablice struktur?

EDIT:
aktualnie mam tak i chyba cos gdzies mi ucieło



#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct dzien
{
    int start_time_godzina;
    int start_time_minuta;
    int end_time_godzina;
    int end_time_minuta;
    int klasa_k;
    char day_name[20];
    char grupa[10];
    char nazwisko[22];
    char przedmiot[20];
    struct dzien* next;
} WDzien;
WDzien* czyt_plan();
WDzien* stworzyListeDzien();
int naz (WDzien* poczatek_listy);

int main()
{

    czyt_plan();
    WDzien* lista = stworzyListeDzien();
    naz(lista);
    return 0;
}





WDzien* czyt_plan()
{
    WDzien* WskDzien = (WDzien *)malloc(sizeof(WDzien));
    FILE *fp;
    if ((fp = fopen("plan.txt", "r")) == NULL)
    {
        printf("Nie moge otworzyc!\n");
        exit(1);
    }

    char line[70];

    while (fgets(line, sizeof(line), fp) != NULL) {
        for (int i = 0;  i < strlen(line); i++) {
            if (line[i] == ':' || line[i] == '-') {
                line[i] = ' ';
            }
        }
        sscanf(line,"%d %d %d %d %s %s %s %s %s %d \n",&WskDzien->start_time_godzina, &WskDzien->start_time_minuta, &WskDzien->end_time_godzina,
              &WskDzien->end_time_minuta,WskDzien->day_name, WskDzien->grupa, WskDzien->nazwisko,WskDzien->przedmiot, &WskDzien->klasa_k);
        printf("%d:%d %d:%d %s %s %s %s Klasa: %d \n",WskDzien->start_time_godzina, WskDzien->start_time_minuta, WskDzien->end_time_godzina,
               WskDzien->end_time_minuta,WskDzien->day_name,WskDzien->grupa,WskDzien->nazwisko,WskDzien->przedmiot,WskDzien->klasa_k);
    }
  printf("\nEnd\n");
      return WskDzien;
    }


WDzien* stworzyListeDzien()
{
    WDzien* dzien = czyt_plan();
    WDzien* poczatek_listy = dzien;
    dzien -> next = czyt_plan;
    dzien = dzien->next;

    return poczatek_listy;
}

int naz (WDzien* poczatek_listy)
{

    WDzien* tmp = poczatek_listy;
    const char *strFrom = ".txt";
    strcat (tmp->nazwisko, strFrom);
        FILE *fp;
    if ((fp = fopen(tmp->nazwisko,"a+")) == NULL)
    {
        printf("Nie moge otworzyc!\n");
        exit(1);
    }


return 0;
}
1

Wybrałeś przechowywanie na liście więc na początek napisz dwie funkcje:

  • tworzącą listę (lista = NULL?)
  • dodającą element do listy (dodaj_element(lista, element) lub dodaj_element(element)).

Potem w czyt_plan():

void czyt_plan()
{
    //WDzien* WskDzien = (WDzien *)malloc(sizeof(WDzien)); //tutaj chwilowo niepotrzebne
    FILE *fp;
    if ((fp = fopen("plan.txt", "r")) == NULL)
    ...
    while (fgets(line, sizeof(line), fp) != NULL) {
        WDzien* WskDzien = (WDzien *)malloc(sizeof(WDzien)); //dopiero tutaj się przyda
        for ...
        sscanf(...
        printf(...
        dodaj_element(WskDzien); //tutaj dodajemy odczytany element do listy
    }
  printf("\nEnd\n");
    }

Później możesz dodać kolejne funkcje: zwalniająca pamięć z listy, wyświetlanie listy, inne operacje na liście.

1 użytkowników online, w tym zalogowanych: 0, gości: 1