Linie w plikach

0

Przypuśćmy że mamy dwa pliki i chcemy wypisać linie które występują w jednym pliku
ale nie występują w drugim pliku
Gdybyśmy to zadanie rozwiązywali w sposób naiwny to dużo razy byśmy czytali z dysku
Myślę że gdyby założyć że pliki są stosunkowo małe to można by wczytać je do pamięci
i tutaj najlepiej by się nadawała lista
Problem w tym że Pascal nie ma modułu do obsługi listy

Węzeł listy powinien się składać z

type wskaznik_listy=^skladnik_listy;
       skladnik_listy=record
       poprzedni:wskaznik_listy; {Ten wskaznik jest opcjonalny, przydaje się gdy chcemy mieć listę dwukierunkową}
       numer:longint;
       linia:string;
       nastepny:wskaznik_listy;
       end;

Tylko jak napisać funkcje do obsługi tego rekordu

0

czyli ściągnąłeś kawałek kodu z sieci i na tym się twoja inwencja skończyła...

0

@nowy121105, najpierw wypadałoby napisać, z jakiego IDE korzystasz;

Jeśli jest to któreś Delphi lub Lazarus to są dostępne przydatne klasy; Jak chcesz wszystko wpakować do pamięci i na tym operować to masz do dyspozycji klasę TStringList; Ta klasa ma metodę LoadFromFile, więc w jednej linijce załadujesz sobie cały plik do pamięci; Ma też właściwość Strings, dzięki której jest dostęp do każdej linii na podstawie indeksu;

A jak koniecznie chcesz użyć listy jednokierunkowej to wystarczy kuknąć do artykułu Implementacja listy jednokierunkowej, którego jestem współautorem; Masz tam gotowy kod dla FPC;

A jeśli chcesz użyć listy dwukierunkowej to jej implementację możesz podkraść z mojego API do obsługi plików TreeStructInfo - klasa TTSInfoElementsList zawiera kompletny mechanizm takiej listy; Dodatkowym mechanizmem jest zapamiętywanie ostatnio używanego węzła, co sprawia, że tokenizowanie węzłów jest prawie tak samo szybkie, jak w przypadku dostępu na podstawie indeksu; Jedyne co być musiał zmienić to typ danych pojedynczego węzła - węzeł typu TListNode przechowuje obiekt w polu Element, a nie łańcuch znaków; Ale to bułka z masłem.

0
unit lista;
interface 
type wskaznik_listy=^skladnik_listy;
       skladnik_listy=record
       poprzedni:wskaznik_listy; {Ten wskaznik jest opcjonalny, przydaje się gdy chcemy mieć listę dwukierunkową}
       numer:longint;
       linia:string;
       nastepny:wskaznik_listy;
       end;
{Nagłówki funkcji i procedur obsługujących listę}
implementation
{Ciała funkcji i procedur obsługujących listę}

end.
0

BP7 lub fpc 2.6 ide version 1.0

Ja rozumiem, że zakupu w miarę aktualnego Delphi możesz nie brać pod uwagę, ale Lazarus w wersji 1.6.2 z FPC 3.0 jest dostępny do pobrania za darmo; Jak chcesz sobie pisać programy to rób w to w ludzkich warunkach, a nie w jakimś badziewnym konsolaku;

Wolałbym napisać to strukturalnie

A masz do tego jakiś sensowny powód, czy po prostu nie znasz programowania obiektowego? Zresztą jak już bardzo chcesz to sobie zamień klasę na zaawansowany rekord lub stary obiekt i już - będziesz miał strukturalny kod.

0

Jak by taka lista w ANSI C wyglądała to bym spróbował ją sobie przepisać na Pascala

0

Furious zapomniał że Newbie to dział dla uczniów

Kategoria Newbie przeznaczona jest dla początkujących oraz na tematy dotyczące podstaw programowania; Listy jedno- i dwukierunkowe to raczej podstawy, tak samo jak prymitywne operacje z użyciem wskaźników, struktur itd.;

Poza tym raczej nie jesteś początkujący, skoro (sądząc po dacie rejestracji) z programowaniem masz do czynienia od 11 lat; No chyba że przez ten czas niczego się nie nauczyłeś i nadal uważasz się za osobę początkującą;

Poza tym zadanie nie wymaga podejścia obiektowego

Ale i nie zabrania;

Poza tym napisałem Ci, że możesz te klasy zamienić coś strukturalnego; Czyli np. na stare obiekty (stare, istniejące już od bardzo dawna, dostępne nawet w TP7), będące zwykłymi strukturami alokowanymi na stosie, tyle że mogące posiadać np. metody; Zaawansowane rekordy w FPC to nic innego jak właśnie stare obiekty, więc to tylko kwestia wybrania składni;

Jak nie umiesz tego sam zrobić to chętnie przyjmę zlecenie przepisania swojej klasy listy dwukierunkowej na kod strukturalny; Jeśli sam nie potrafisz tego zrobić lub nie masz czasu to pisz PM;

Ściągnąłem instalator Lazarusa 1.6.0 z FPC 3.0 ale po jego uruchomieniu okazało się że pełna instalacja zajmie ok 1GB [...]

No i? Jak chcesz programować w Pascalu w ludzkich warunkach to Lazarus jest do tego bardzo dobrym narzędziem; Mniej więcej tyle samo zajmują starsze wersje Delphi - nowsze wersje i inne środowiska zajmują dużo więcej;

[...] a ile zająłby moduł do obsługi listy jednokierunkowej bądź dwukierunkowej

No to sobie napisz taki moduł i nie nudź, skoro wolisz używać jakiegoś badziewnego IDE i pracować w warunkach, które były dobre 20 lat temu; Równie dobrze mógłbyś pisać kod w notatniku i ręcznie z konsoli uruchamiać kompilator;

Na dodatek mam mało miejsca na dysku twardym

Czas najwyższy przeglądnąć jego zawartość i wywalić co zbędne;

Jak by taka lista w ANSI C wyglądała to bym spróbował ją sobie przepisać na Pascala

No to sobie poszukaj w Google i portuj, skoro gotowce są złe.

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