[PASCAL]Jednakowe odstępy między wyrazami w kolejnych liniac


(kozunio12) #1

Jak usunąć coś z konkretnej lini tekstu? Czy Pascal posiada jakieś zaawansowane funkcje edycji tekstu, typu przejście do konkretnej lini, czy też muszę przepisywać cały plik na nowo z pominięciem usuniętego rekordu?

EDIT:

ostatni post aktualizacja tematu


(Drobok) #2

Przepisz plik bez usuwanego elementu. A potem usuń pierwszy i zamień go z drugim. Innej metody nie ma.

Jeśli plik jest mały, możesz całość wczytać do pamięci a potem zapisać po wcześniejszym usunięciu elementu.

//@down tutaj nie odrabiamy zadań domowych, ja co najwyżej cię mogę naprowadzić ;]


(kozunio12) #3

Czyli np. tab_:=tab[i+1], gdzie i to numer elementu kasowanej pozycji?_


([alex]) #4

raczej:

if(i&1) tab[k++]=tab[i];

(kozunio12) #5

Napotkałem kolejny problem. Mianowicie, nie wiem w jaki sposób mogę wypisać w konsoli tekst, aby poszczególne wyrazy miały jednakową odległość między sobą, gdy długości wyrazów są różne np.

1. tekst1 tekst1 tekst1 tekst1 tekst1 tekst1

2. dluzszytekst1 dluzszytekst1 dluzszytekst1 dluzszytekst1 dluzszytekst1 dluzszytekst1

(Tomek Matz) #6

Iterujesz po wszystkich słowach z tekstu i znajdujesz długość najdłuższego wyrazu. W podanym przykładzie jest to 13 (dluzszytekst1). Gdy będziesz chciał wyświetlić krótszy wyraz (np. tekst1) przy użyciu funkcji write to najpierw "uzupełnisz" go w pętli o brakujące spacje (długość wyrazu dluzszytekst1 to 13, długość tekst1 to 6 zatem wyraz tekst1 musisz uzupełnić o 7 spacji).

BTW Jak masz nowe pytanie to zakładaj nowy topic. Nie usuwaj tego co napisałeś wcześniej. Ewentualnie przygotuj topic z zestawem pytań (jak są to krótkie pytanka).


(kozunio12) #7

tylko mam mały problem, gdyż operuję na typie rekordowym i Dev Pascal wyrzuca mi:

464 / 56 test_b~1.pas

Error: Incompatible type for arg no. 1: Got TELEFON, expected ANSISTRING

Jednak takie przypisanie wartości zmiennej nie stanowi żadnego problemu dla pascala

temp:=length(tablica[1].producent);


(Tomek Matz) #8

Kiedy pojawia się ten błąd? Wiesz nie musisz przypisywać tych spacji bezpośrednio do składowej rekordu (w zasadzie to nawet nie powinieneś). Możesz sobie tworzyć zmienną tymczasową (tak jak zrobiłeś do dla długości słowa) i ją modyfikować. Możesz też w ogóle nigdzie ich nie przypisywać, a od razu w pętli wypisywać na ekran, czyli write(' ');


(kozunio12) #9

Chcę tak później zrobić, tylko najpierw chcę, aby w pętli wyszukał mi najdłuższy tekst i jemu przypisał wartość max.

i:=1;

     temp:=length(tablica[i].producent);


     repeat

         [b]if (length(tablica[i].producent)
     inc(i);

     until i+1=ile{zmienna odpowiadająca za ilość rekordów w bazie};


     write(temp:4);

(Tomek Matz) #10

Twój kod wymagał kilku poprawek, a sam błąd kompilacji wynika najprawdopodobniej z tego, że w tej linijce masz coś takiego length(tablica[i+1])

i:= 1;

     temp:= length(tablica[i].producent);


     repeat

         if (temp < length(tablica[i+1].producent)) then temp:= length(tablica[i+1].producent);

         inc(i);

     until i = ile;