Plik i rekordy konwersja

0

witam
w jaki sposób zamienić dane z pliku w takim formacie:
imie;nazwisko;adres; na plik z rekordami?

0

Normalnie!!

Gdybyś popróbował i się pomęczył ze 3h to byś wiedział. Ja tak zawsze robie nim zapytam kogoś o pomoc.

Tworzysz typ rekordowy, deklarujesz plik typowany.

Potem tylko rozdzielasz tego stringa z ';' i pakujesz do rekordu i następnie zapisujesz.

Type TLosowanieLotka=Record
Data:String;
Blabla1:String;
Liczby:Array[0..19] of Byte;
End;

Plik typowany: Var Plik:File Of TLosowanieLotka;

0

Popierwsze tworzysz nowy typ record o strukturze jaka wymagasz.
Potem procedurka zczytujaca plik wejsciowy (readln) i wyluskujaca lancuchy pomiedy srednikami. To co wyluska przyporzadkowuje do odpowiednich pol rekordu czyli rekord.nazwisko:= lancuch1, itd...
A gotowy rekord zapisuje do nowego pliku typu File of TypTwojRecordu.
No i masz nowy plik. [browar]

0

Dobra..... :|

Pomóżcie mi jedynie z procedurą zczytującą string między średnikami...
bo z tym mam kłopot.. [glowa]
z resztą sobie poradzę :-8

0

Robisz TStringList, i dajesz coś takiego StringList.text:=StringReplace(Linia,';',#13#10,[rfReplaceAll]); i potem masz w StringList.Strings[nr stringa] pozycje.

0

Type TLosowanieLotka=Record
Data:String;
Blabla1:String;
Liczby:Array[0..19] of Byte;
End;

Plik typowany: Var Plik:File Of TLosowanieLotka;

BŁĄD!!!! W rekordzie zapisywanym do pliku nie można użyać długich stringów. Stringi są dynamiczne, czyli są wskaźnikami. W powyższym przykładzie jako Data i Blabla1 zostaną zapisane tylko 4-bajtowe wskaźniki dołańcuchów, a nie zawartość tych łańcuchów. Oczywiście przy późniejszym odczycie te wskaźniki będą bez sensu a zawartość łańcuchów nie zostanie odzyskana. A nawet jakby się zapisały, to długie stringi mają z definicji zmienną długość, więc skąd program przy odczycie ma znać wielkości pól rekordu?? Do rekordów należy uzywać krótkich stringów (np. string[10] - uwaga, w rekordzie zajmie 11 bajtów) albo array[0..9] of char.

I jeszcze jedno - do plików lepiej uzywać packed record. Zwykły record jest dla przyspieszenia zapisywany z wyrównywaniem pól, tzn między pola są wstawiane dodatkowe bajty. Jeśli plik bedzie czytany programem napisanym w czym innym (lub skompilowanym z innymi opcjami wyrównywania pól) t się może skopać.

0

pq to był przykład na zachętę, nigdy nie chce podawać gotowego rozwiązania, niech sobie człowiek pomyśli i wysili się skoro ta ma być jego program no nie??

pq całokowicie się z tobą zgadzam, bo String może pomieścić 2GB a może i 40 bajtów. [cya]

0

Co do oddzielania stringów średnikami to trochę głupi pomysł. Najlepiej trochę pomyśleć i... Stringa zamienić na array of char, a przed nim wstawić informacje o długości (byte, word, longword)

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