Mam takie zadanie, czytanie tego pliku linia po lini używając pętli for.
Nie mogę użyć czytania całego pliku. Problem też jest że każdy if jest inny ( ma różną długość)
Twoje rozwiązanie działa naprawdę fajnie, ale muszę to czytać linia po linii.
Ktokolwiek dał Ci to zadanie, nie pokazuje Ci dobrej drogi do nauki programowania. Są faktycznie problemy które wymagają przetwarzania treści po kawałku (chunks). Głównym powodem ku temu jest wydajność, kiedy chcemy przetworzyć plik który ma 60GB, i nie da się go wczytać całego do ramu - wtedy jaknajbardziej. Ale w przypadku kiedy mamy mały rozmiar pliku, przetwarzanie tego linijka po linijce dodaje tylko dodatkową, niepotrzebną złożoność. Nie mówiąc o tym, że jest to całkowicie zbędne, bo program napisany który wczytuje plik w całości, oraz program który robi to linijka po linijce, po samym tylko działaniu programu, nie da się ich rozróżnić. Ja na Twoim miejscu powiedziałbym "zlecającemu", że to zadanie nie ma sensu. Są też inne zadania, które mogą nauczyć przetwarzania w pętlach, dobrym przykładem byłyby struktury drzewiaste, grafy, listy, może jakaś gra jak sudoku, lub szachy, w nich przetwarzanie czegoś w pętli z zapamiętaniem stanu byłoby bardzo wartościowe. Ale takie sekwencyjne dane jak treści pliku, które w gruncie rzeczy są listą znaków, nie ma to żadnego sensu.
Teraz, kiedy patrzę na treść którą dodałeś w poście: Usunięcie ifa z wybranej funkcji, faktycznie wygląda jakby ktoś go napisał z myślą o tym, żeby zmusić kogoś do napisania parsera linijka po linijce - świadczą o tym klamry { oraz } specjalnie zostawione w osobnych linijkach. W większości języków, te klamry zapewne były w tej samej linijce co kod.
Moja analiza tego zadania jest więc taka:
- Ktoś chciał nauczyć ludzi obsługi pętli lub ewentualnie parsera
- Sam nie umiał tego zbyt dobrze zrobić, więc napisał kod który parsuje taki kod linijka po linijce
- Zauważył że trudniej będzie parsować klamry, dlatego w przykładzie wsadził je do osobnych linii
- Potem zadał zadanie: "usuń linijkę parsując plik po kolei"
Co moim zdaniem jest zupełnie odwrócone. Nie robi się czegoś takiego że krytykuje się rozwiązanie, bo "nie tak miałeś to zrobić tylko inaczej". Chyba że ktoś na prawdę chciał się porwać na pisanie parsera, co jest karkołomnym zadaniem, z powodów o których mówiłem już wcześniej.
Ale jeśli koniecznie ma to być tak zrobione, bez specjalnego sensu, to do Twojego kodu należy dodać zmienną, która "pamięta" czy zachować następną linijkę czy nie:
Kopiuj
preserve = True # załóż, żeby początkowo linijki były zapisane
with open(ścieżka_do_zapisu, 'w') as zapis:
with open(ścieżka_do_odczytu, 'r') as odczyt:
for linia in odczyt:
if "if(nazwa_zniennej_1 > 6):" in linia: # sprawdź czy następna linijka rozpoczyna warunek
preserve = False # ustaw zmienną na false
if preserve: # tak długo jak zmienna jest false, następna linijka nie będzie zapisana
zapis.write(linia)
if "}" in linia: # znaleziono klamrę zamykającą
preserve = True # następne linijki będą zapisane