Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Заполнение полей записи из файла

Автор: -Anna- 24.02.2006 3:38

Есть файл Test.txt состоящий из 10 строк, каждая строка такого содержания:
фамилия:имя:год рождения:улица:дом:квартира:телефон
: - это разделитель.
И есть запись и массив на эту запись

Код

Type TBase = Record
     Family:string;
     Name:string;
     Year:integer;
     Street:string;
     Dom:integer;
     kvar:integer;
     Tel:integer;
     End;

var Spisok: Array[1..10] of TBase;

Подскажите пожалуйста, как заполнить поля записи из этого файла. Т.е. меня интересует, как
выделить из строки например фамилию и записать ее в поле family, имя в name и т.д..

Автор: мисс_граффити 24.02.2006 3:44

http://forum.pascal.net.ru/index.php?showtopic=6972 - разбиение на слова. все способы.
не помогло?

Автор: volvo 24.02.2006 4:39

мисс_граффити, можно и так, но как бы не получилось "из пушки по воробьям"... Если разделитель только один, я бы сделал вот так, наверное:

Type TBase = Record
Family:string;
Name:string;
Year:integer;
Street:string;
Dom:integer;
kvar:integer;
Tel:integer;
End;

function strInt(s: string): integer;
var X, err: integer;
begin
val(s, X, err);
strInt := X;
end;
function get_str(s: string; n: integer): string;
var
i, start, finish: integer;

function next: integer;
begin
next := start + pos(':', copy(s, start, 255))
end;

begin
start := 1;
for i := 1 to pred(n) do start := next;
finish := next;

if finish = start then
finish := length(s) + 2;

get_str := copy(s, start, pred(finish - start));
end;

var
Spisok: Array[1..10] of TBase;
i: integer;
s: string;

begin
s := 'Family:Name:1990:Street:10:12:12345';
with spisok[1] do begin
family := get_str(s, 1);
name := get_str(s, 2);
year := strInt(get_str(s, 3));
street := get_str(s, 4);
dom := strInt(get_str(s, 5));
kvar := strInt(get_str(s, 6));
tel := strInt(get_str(s, 7));
end;
writeln;
end.

Здесь заполнение одной записи... Идея понятна?