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

Znalezienie pustej linii w pliku

Object Storage Arubacloud
0 głosów
1,807 wizyt
pytanie zadane 31 października 2015 w C i C++ przez radek024 Szeryf (77,160 p.)

Witam, mam problem związany z czytaniem pliku - tworzę plik html, który ma pustą linię. Chcę przejrzeć cały plik i coś w niej umieścić. 

http://pastebin.com/GVhk4Hz9

 

Pod linkiem jest kod, nie wrzucam go na forum, ponieważ jest przydługi i niewygodnie by się go przeglądało. Ktoś ma jakieś pomysły jak to zrobić?

Pozdrawiam.

2 odpowiedzi

+1 głos
odpowiedź 31 października 2015 przez Patrycjerz Mędrzec (192,320 p.)
edycja 31 października 2015 przez Patrycjerz

Wczytujesz sobie każdy wiersz pliku do obiektu std::string za pomocą getline, a potem sprawdzasz pętlą, czy dany znak w wierszu jest mniejszy bądź równy 32 (kod ASCII). Jeśli wszystkie spełnią ten warunek, to znaczy, że dany wiersz jest pusty.

std::fstream plik;
std::string tekst;
getline(plik, tekst);
for(int i = 0; i < tekst.length(); i++)
{
	if(tekst[i] > 32)
	{
		std::cout << "Nie pusta linia!" << std::endl;
		break;
	}
}

 

komentarz 31 października 2015 przez furas Maniak (53,800 p.)
W sumie w pliku teksotwym pusta linia przeważnie ma spacje i/lub tabulatory więc zwykle te dwa znaki się sprawdza. Jeśli ma coś innego to raczej nie jest pusta.
komentarz 31 października 2015 przez radek024 Szeryf (77,160 p.)
Wygląda na to, że takie rozwiązanie będzie ok.

Tylko jak określić plik html, aby to on był czytany?
komentarz 31 października 2015 przez furas Maniak (53,800 p.)
Jeśli chcesz czytać i zapisywać do jednego pliku to nie da rady. Możesz oryginalny otworzyć do odczytu i musisz stworzyć plik tymczasowy do zapisu. Odczutyjesz z oryginalnego i wszystko zapisujesz do tymczasowego. Na koniec oba zamykasz, kasujesz oryginalny a tymczasowemu nadajesz nazwę oryginalnego.
komentarz 31 października 2015 przez radek024 Szeryf (77,160 p.)
Ok, w takim razie jak będzie wyglądało takie rozwiązanie? Myślałem nad zapamiętaniem pustej linii do zmiennej, następnie o jakiejś napisaniu jakiejś funkcji, która wprowadzałaby dane - ale skoro tak się nie da, słucham uważnie :)
komentarz 31 października 2015 przez furas Maniak (53,800 p.)
Jeśli chcesz zmodyfikować plik to masz dwa rozwiązania jak opisałem w odpowiedzi.

pierwsze rozwiązanie:

1. otworzyć plik do odczytu
2. wczytać całość do pamięci
3. zamknąć plik
4. zmodyfikować zawartość w pamięci
5. otworzyć ten sam plik do zapisu
6. zapisać całość z pamięci
7. zamknąć plik

drugie rozwiązanie - gdy plik jest za duży aby w całości go wczytać.

1. otworzyć oryginalny plik do odczytu
2. stworzyć plik tymczasowy do zapisu
w pętli:
    3. czytać z oryginalne po kawałku (np. po jednej linii) do pamięci
    4. modyfikować wczytany kawałek jeśli jest potrzeba
    5. zapisywać wczytany kawałek do pliku tymczasowego
    6. dodawać nowe linie do pliku tymczasowego jeśli ma być coś nowego
7. na koniec zamknąć oba pliki
8. skasować oryginalny plik
9. zmienić nazwę pliku tymczasowego na taką jaką miał plik oryginalny.
0 głosów
odpowiedź 31 października 2015 przez furas Maniak (53,800 p.)
I w czym dokładnie jest problem ?

Trzeba plik otworzyć, wczytać w całości, zamknąć plik, wyszukać pustą linię we wczytanych danych, dodać co potrzeba, otworzyć ten sam plik do zapisu, całość zapisać (aby wszystko nadpisało) i zamknąć plik.

Można też otworzyć oryginalny plik, wczytywać linia po linii, zapisywać je do innego, tymczasowego pliku, gdy pojawi się pusta linia to do tymczasowego pliku zapisać dodatkowe dane, potem dalej czytać dane z oryginalnego pliku i przepisywać do tymczasowego. Na koniec zamknąć oba pliki, skasować oryginalny plik a tymczasowemu nadać nazwę tego oryginalnego.

Podobne pytania

0 głosów
2 odpowiedzi 503 wizyt
pytanie zadane 14 lipca 2020 w C i C++ przez Kxmil Nowicjusz (220 p.)
0 głosów
1 odpowiedź 817 wizyt
pytanie zadane 25 czerwca 2019 w C i C++ przez kenjiro244 Dyskutant (8,600 p.)
+3 głosów
4 odpowiedzi 1,715 wizyt
pytanie zadane 30 czerwca 2015 w C i C++ przez Phobos Użytkownik (720 p.)

92,576 zapytań

141,426 odpowiedzi

319,651 komentarzy

61,961 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!

...