program Project2;
{$APPTYPE CONSOLE}
uses
SysUtils,StrUtils;
function TranslitRus2Lat(const Str: string): string;
const
RArrayL = 'абвгдеёжзийклмнопрстуфхцчшщьыъэюя';
RArrayU = 'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЫЪЭЮЯ';
colChar = 33;
arr: array[1..2, 1..ColChar] of string =
(('a', 'b', 'v', 'g', 'd', 'e', 'yo', 'zh', 'z', 'i', 'y',
'k', 'l', 'm', 'n', 'o', 'p', 'r', 's', 't', 'u', 'f',
'kh', 'ts', 'ch', 'sh', 'shch', '''', 'y', '''', 'e', 'yu', 'ya'),
('A', 'B', 'V', 'G', 'D', 'E', 'Yo', 'Zh', 'Z', 'I', 'Y',
'K', 'L', 'M', 'N', 'O', 'P', 'R', 'S', 'T', 'U', 'F',
'Kh', 'Ts', 'Ch', 'Sh', 'Shch', '''', 'Y', '''', 'E', 'Yu', 'Ya'));
var
i: Integer;
LenS: Integer;
p: integer;
d: byte;
begin
result := '';
LenS := length(str);
for i := 1 to lenS do
begin
d := 1;
p := pos(str[i], RArrayL);
if p = 0 then
begin
p := pos(str[i], RArrayU);
d := 2
end;
if p <> 0 then
result := result + arr[d, p]
else
result := result + str[i];
end;
end;
procedure parse(input:string;var lat:string;var lon:string;var name:string; var ntname:string);
var
buf:string;
ltr:string;
lp:integer;
o:array[1..30] of string;
ind:integer;
begin
ind:=1;
for lp:=0 to length(input) do
begin
ltr:=copy(input,lp,1);
if ltr<>' ' then
begin
buf:=buf+ltr;
end
else if buf<>'' then
begin
o[ind]:=buf;
ind:=ind+1;
buf:='';
end;
end;
lat:=o[4]+'000000000000000';
lat:=copy(lat,0,10);
lon:=o[5]+'000000000000000';
lon:=copy(lon,0,10);
name:=TranslitRus2Lat(UTF8Decode(o[ind-3]));
ntname:=UTF8Decode(o[ind-3]);
end;
var
f,o:textfile;
buf:string;
lat,lon,name,ntname:string;
id:integer=0;
i:real;
c:integer;
lat_b,lat_e,lon_b,lon_e:real;
lat_c,lon_c:real;
ind:integer;
sym:byte;
pr:string='=========================';
begin
lat_b:=50;
lat_e:=52;
lon_b:=38;
lon_e:=42;
ind:=0;
writeln('Выборка населенных пунктов по данным NGA');
writeln('----------------------------------------');
write('начальная широта :');readln(lat_b);
write('конечная широта :'); readln(lat_e);
write('начальная долгота:'); readln(lon_b);
write('конечная долгота :'); readln(lon_e);
assignfile(f,'./rs.txt');
reset(f);
assignfile(o,'./out.txt');
rewrite(o);
readln(f,buf);
writeln('');
writeln('идет выборка...');
writeln('');
writeln('0..........50.........100');
while not eof(f) do
begin
ind:=ind+1;
readln(f,buf);
parse(buf,lat,lon,name,ntname);
val(lat,lat_c,c);
val(lon,lon_c,c);
if lat_c>=lat_b then
if lat_c<=lat_e then
if lon_c>=lon_b then
if lon_c<=lon_e then
if name=ntname then
begin
id:=id+1;
writeln(o,'Waypoint,D,',name,', ',lat,', ',lon,',07/29/1997,21:59:09,
')
end;
if ind/100=(ind div 100) then
begin
writeln (copy(pr,0,ind *25 div 517200));
writeln('обработано:',ind,' (',ind *100 div 517200,'%)');
writeln('удовлетворяет условиям:',id);
writeln(chr(27),'[4A');
end;
end;
closefile(o);
closefile(f);
writeln('');
writeln('');
writeln('');
writeln('');
writeln('выборка окончена. результаты сохранены в out.txt');
end.