• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

[C] Odczyt pojedynczej linii z pliku dynamicznie

Object Storage Arubacloud
0 głosów
1,440 wizyt
pytanie zadane 24 kwietnia 2016 w C i C++ przez programmero Bywalec (2,420 p.)

Witam tak jak w tytule jak odczytać wszystkie linie z pliku i zapisać je do tablicy/listy? Załóżmy otwieram plik txt składający się z 5 linii przy czym każda linia ma różną długość.

Programowanie w C, dzialania na plikach.
Krotsza linia
bardzo dluga linia, 123456789. Jest to nadal jedna linia. bardzo dluga linia, 123456789. Jest to nadal jedna linia.
TUTAJ NIECO KROTSZA!!!
ostatnia linia w pliku... rowniez dluzsza 123456789 abcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabcde123ostatnia linia w pliku... rowniez dluzsza 123456789 abcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabcde123

 

Jak optymalnie napisać program aby dynamicznie dobierał dla każdej linii odpowiednią długość a następnie zapisywał linie do tablicy albo listy jednokierunkowej aby wyświetlać na ekranie całą zawartość ewentualnie zapisać do innego pliku.

Których funkcji użyć do odczytu linii pliku fgets() fscanf()? :)

1 odpowiedź

+1 głos
odpowiedź 24 kwietnia 2016 przez Patrycjerz Mędrzec (192,320 p.)
edycja 24 kwietnia 2016 przez Patrycjerz

Sądzę, że powinieneś użyć listy jednokierunkowej oraz funkcji fgetc.

Podana funkcja czytałaby poszczególne znaki pliku i dodawałaby je do listy, aż do napotkania symbolu nowej linii \n - oczywiście musiałbyś pamiętać o dodaniu na końcu napisu symbolu \0.

Każda lista znaków reprezentowałaby oddzielną linię pliku, więc mógłbyś zrobić listę list, aby nie podawać odgórnie ilości wierszy.

Konceptualnie mogłoby to wyglądać tak:

struct Znak
{
	char znak;
	Znak* wskaznik;
}

struct Lista
{
	Znak* glowa;
	Lista* wskaznik;
}

//...

Lista* glowa_lista = NULL; // Głowa listy zbudowanej z obiektów struktury "Lista" (lista list)

int flaga = 1;

while(flaga)
{
	Znak* glowa_znak = NULL; // Głowa listy zbudowanej z obiektów struktury "Znak" (lista znaków)

	while(true)
	{
		char znak = fgetc(plik);
		
		if(znak == '\n')
		{
			dodajDoListy(glowa_znak, '\0');
			break;
		}
		
		if(znak == -1)
		{             
            dodajDoListy(glowa_znak, '\0');
			flaga = 0;
			break;
		}
		
		dodajDoListy(glowa_znak, znak);
	}
	
	dodajDoListy(glowa_lista, glowa_znak);
}

// Wypisanie na ekran kolejnych wierszy pliku
for(int i = 0; i < dajWielkoscListy(glowa_lista); i++)
{
	for(int j = 0; j < dajWielkoscListy(dajElementListy(glowa_listy, i)); j++)
		printf("%c", dajElementListy(glowa_znak, j));
	printf("%c", '\n');
}
komentarz 24 kwietnia 2016 przez programmero Bywalec (2,420 p.)
Dla mnie czytanie pliku i zapis do bufora to czarna magia ;[
1
komentarz 24 kwietnia 2016 przez Patrycjerz Mędrzec (192,320 p.)

No to się ucz - wiedza sama nie przyjdzie wink

komentarz 25 kwietnia 2016 przez programmero Bywalec (2,420 p.)
Wiem że nie przyjdzie tylko co znajdę tutki to wszędzie czytanie linii jest ograniczone tablicą z góry określonym rozmiarem :[

Podobne pytania

+1 głos
1 odpowiedź 1,406 wizyt
pytanie zadane 22 lutego 2016 w C# przez kuba00 Nowicjusz (130 p.)
0 głosów
1 odpowiedź 527 wizyt
pytanie zadane 10 stycznia 2018 w C i C++ przez natan98 Nowicjusz (140 p.)
0 głosów
1 odpowiedź 485 wizyt
pytanie zadane 18 listopada 2019 w C i C++ przez Barczer Nowicjusz (120 p.)

92,565 zapytań

141,418 odpowiedzi

319,604 komentarzy

61,952 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...