Zapis plikow *.txt i *.pas - limit do 8 znakow

0

Witam!
Otóż moje pytanie brzmi:
Czy da się jakoś zrobić, aby pascal zapisywał pliki o dłuższej ilości znaków?
Bo np. teraz zaczęliśmy pracować na plikach tekstowych *.txt i chciałbym, aby pascal tworzył pliki wg zmiennych, które poda użytkownik czyli np. 'imie nazwisko.txt' - to udało mi się osiągnąć, ale jeśli długość nazwy (przed rozszerzeniem) przekracza 8 znaków, to ta nazwę po prostu ucina. Czy da się zwiększyć, aby pascal nie "zjadał" nazwy? Liczę na szybką odpowiedź.
Pozdrawiam, StOcK

0

Tak da się zapisywać bardzo długie stringi w plikach binarnych. Przed zapisaniem stringu należy wcześniej zapisac jego długość. Wystarczy do tego typ integer. Przy odczycie należy ją wczytać. Poniżej prosty przykład w Delphi (zarówno w VCL jak i WinAPI), ale rownie dobrze można go zastosować pod FPC, jeżeli to tego kompilatora oraz IDE używasz. Tutaj dodatkowo zapisałem na początku ilośc rekordów. Chyba maksymalny zakres zmiennej typu Integer jest tutaj aż nadto wystarczający. A że nikt przede mną Tobie nie odpowiedział to uważam, że moja odpowiedź jest wystarczająco szybka ;) A i teraz doczytałem, że masz problem z ilością znaków w nazwie pliku. Napisze szczesze: TP to przeżytek i nie powinno się go używac. Do prostych programów nawet w konsoli powinno wystarczyć Delphi 7 Personal z wygooglowanym ewentualnym modułem CRT dla konsoli widnowsowej albo skorzystanie ze wspomnianego FPC, który jest dostępny również pod Windowsy, a co za tym idzie obsługuje długie nazwy. Jeżeli jednak ktoś narzuca Tobie używanie starego Turbo Pascala to go wyśmiej, po czym przekonaj go do zmiany poglądu, bo ponoć tylko krowa go nie zmienia.

program example2;

{$APPTYPE CONSOLE}

const
  MaxCnt = 6;
  AFileName = 'D:\test_2.bin';
  TxtArr : array[1..MaxCnt] of string = ('ucz', 'sie', 'podstaw', 'i', 'kombinuj', 'sam.');
var
  S : string;
  AFile : File of Byte;
  I, TxtLength, RecCnt : integer;
  DataArr : array[1..MaxCnt] of string;
begin
  for I := Low(DataArr) to High(DataArr) do
    DataArr[I] := TxtArr[I];
  // Zapis
  RecCnt := Length(DataArr);
  Assign(AFile, AFileName);
  Rewrite(AFile);
  BlockWrite(AFile, RecCnt, SizeOf(RecCnt));
  for I := Low(DataArr) to High(DataArr) do
  begin
    TxtLength := Length(DataArr[I]);
    BlockWrite(AFile, TxtLength, SizeOf(TxtLength));
    BlockWrite(AFile, DataArr[I][1], TxtLength);
  end;
  Close(AFile);
  // Odczyt
  Assign(AFile, AFileName);
  Reset(AFile);
  BlockRead(AFile, RecCnt, SizeOf(RecCnt));
  for I := 1 to RecCnt do
  begin
    BlockRead(AFile, TxtLength, SizeOf(TxtLength));
    SetLength(S, TxtLength);
    BlockRead(AFile, S[1], TxtLength);
    Writeln(S);
  end;
  Close(AFile);
  Readln;
end.
0

W zasadzie to chodzi mi o to, zeby dalo sie zapisac plik o nazwie nie dluzszej niz 30 znakow (chyba tyle wystarczy na imie i nazwisko).
W Delphi nigdy nie programowalem i nie bardzo wiem co niektore instrukcje robia ;) Moglbys jakos prosciej opisac? ;D
Pozdrawiam

0

Ten kod akurat bez problemów skompiluje się również w Pascalu. Czego nie rozumiesz? Prosciej się nie da. W razie czego google i jazda, samodzielna nauka i kombinowanie najbardziej się, według mnie - Tobie przyda.

0
olesio napisał(a)

RecCnt := Length(DataArr);
</delphi>

hmm... blad 67

0

Sorry, ale jesteś jakiś ograniczony, rozumiesz po polsku? Nikt już nie powinien pisać w Turbo Pascalu, nie będę teraz modził z kodem, dla którgo po paru poprawkach mimo zastosowania TPPatcha odgrzebany TP 7.0 z czasów początków zabawy dawno temu na XP - wywala mi i tak error 200 i nie zna SetLngth. UŻYJ FPC, A NIE STARCIA TP, KTÓRY NIE JEST KOMAPTYBILNY - POCHODZI ON Z CZASÓW DOSA, A DOSA TO SOBIE MOŻESZ DO FAJNYCH STARYCH GIER W DOSBOXIE POUZYWAĆ, A NIE DO PISANIA PROGRAMÓW!!! POD FPC WSZYSTKO DZIAŁĄ OK!!! Może krzyk zauważysz, bo jak pisze normalnie to nie wiem, nie dociera chyba do Ciebie ;/

0

Sorry, ale ja sobie tego nie wymyslilem ;d
tak sie akurat sklada, ze sor wymyslil sobie programowanie od pascala (prawdopodobnie we FPC nawet nie bedziemy programowac), to w "Turbo Pascalu" da sie jakos dluzsza nazwe zrobic? ;d

2
StOcK napisał(a)

W zasadzie to chodzi mi o to, zeby dalo sie zapisac plik o nazwie nie dluzszej niz 30 znakow

Jeżeli masz na myśli Turbo Pascal to się nie da. Nazwa pliku musi mieć max 8 znaków + 3 rozszerzenie.

@olesio
Nie unoś się. W Turbo Pascalu można uczyć się programowania i po pewnym czasie spróbować sił np w Delphi.

0

Nie da się, bo DOS ogranicza nazwy do 8 znaków plus max 3 rozszerzenia. Może jest jakiś sposób, bo są jakieś ładowane na przykład przez bootowalną płytkę Hiren Boot CD nakładki pozwalające pod chyba też Volcov Commanderem zobaczyć długie nazwy. Ale jak to działa nie wiem. Dos to przeżytek. Ja wiem, sam jestem fanem starych gier i klasycznego komputera Amiga. Ale bez przesady. Dos bardzo Ciebie będzie ograniczał i za dużo w tym kombinacji. Możesz zrobić takie rozwiązanie. Wygooglować sobie HSPascala pod Amigę i pod Emulatorem w nim pisac, ale tam składnia mimo że podobna to wiele rzeczy robi się inaczej na pewno. Brak jest fajnych przykładów w tym języku. Jest ich bardzo mało, ale jak najbardziej pod dosowym Fellowem czy UAE powinno dać się obsłużyć pliko partycje czyli pliki HDF, na których można zapisać system i sam kompilator z długimi nazwami plików. Jednak dosowym Fellowem bawiłęm się ostatni raz chyba pod koniec 2003 roku. Teraz pozostaje nierozwijany WinFellow albo WinUAE w starszych wersjach działający lepiej na wolnych lub starszych PC. Nic innego Ci nie wymyślę. Psora za to radził bym uświadomić, że DOS to przeżytek. Niestety, fajnych było wiele gier dosowych, ale do tego jest DosBox. Programowanie w TP to masakra, a limitu krótkich nazw plików nie przeskoczysz ;/ Chyba, że się mylę to niech ktoś mnie poprawi.

@pelsta: nie unoszę się. Ale co to za kardra naukowa/pedagogiczna czy jak tam ją zwąć, która nakazuje pisanie w takim przeżytku. Cokolwiek byle by pod Windowsa. Bo Dev-Pas też bzdetny, ale niech będzie FPC, jak nie FPC to nie wiem jakieś stare Delphi, jeżeli nie siódemka to trójka. Ale na co ludzi dręczyć starusieńkim TP to nie wiem ;/ Chyba komputery w szkolnej pracowni udźwigną FPC albo jakieś starsze Delphi, nawet pod Windows 98 czy i 95 dały by radę.

0

na pewno jest jakis sposob, bo jesli sie zapisuje (w TP) plik, to sciezka tez jest skracana np. Progr~1\ itp.
Dzieki za szybkie odpowiedzi i pozdrawiam ;d

0

Nie da się, bo DOS ogranicza nazwy do 8 znaków plus max 3 rozszerzenia
Da się, i są do tego udokumentowane przerwania DOS-a.
Przykładem DOS-owego programu który widzi długie nazwy plików jest systemowy EDIT.
Turbo Pascal jest zbyt stary (7.0 z 1992 roku, a długie nazwy weszły dopiero w 1995 wraz z Windowsem 95) żeby to obsługiwać.

DA SIĘ zrobić, żeby w programie napisanym pod TP działały długie nazwy plików. Ale to jeśli byłaby taka konieczność - czyli w ramach minimalnego unowocześnienia programu, którego z innych powodów nie opłaca się przenosić na nowszy kompilator.

I tak, wiem jak to zrobić - a raczej wiem gdzie jest dokładnie napisane jak to zrobić.

Ale to nie ma sensu. Zbyt duże rzeźbienie, podczas gdy program skompilowany Free Pascalem (nawet pod DOS-a!) będzie prawidłowo czytał i zapisywał długie nazwy plików bez ich skracania.

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