Обработка *.txt файла

За вознаграждение или нахаляву (если повезёт)

Модераторы: Хыиуду, MOTOCoder, Medved, dr.Jekill

Ответить
vohakot
Сообщения: 2
Зарегистрирован: 29 мар 2008, 01:47
Контактная информация:

Имеется некий текстовый файл в DOS кодировке, состоящий из строк. В свою очередь, каждая строка состоит из кодов (заключенных между символами «/» и «=») и присвоенных им значениям (идущих после символа «=»). Файл достаточно большой (около 700 Мбайт), пример его уменьшенной структуры в архиве под названием «База.txt». Кодов, которым присвоены значения всего 168 шт., все значения кодов перечислены в файле архива «Коды.txt». Следует учесть, что некоторые пары "код–его значение" пропущены.
Что с этим надо сделать:
Написать программу, которая сделала бы из текстового файла База.txt файл Таблица.dbf, у которого названиями столбцов служили коды значений из файла «Коды.txt».
Плюсом предусмотреть функцию в данной программе или лучше написать дополнительную программу, которая делала следующие операции. Я ввожу значение для поиска (например /205=Санкт), если этот текст содержится в строке базы, то строка остается, если нет - строка удаляется. В нашем примере (приведенный в архиве) должен получиться файл База_01.txt с единственной строкой /200=Петров/201=Степан/205=Санкт-Петербург/206=Гагарина/01=10

За любую помощь, заранее огромное спасибо. Чем смогу, обязательно отблагодарю за написание программы.
Вложения
Архив.zip
(936 байт) 13 скачиваний
Medved
Сообщения: 256
Зарегистрирован: 14 фев 2008, 20:51
Контактная информация:

Вот вторая часть:
[syntax='Delphi']
program lalala;

var
a,l:string; f1,f2:text;
begin
assign(f1,'База.txt');
assign(f2,'База_01.txt');
reset(f1);
rewrite(f2);
Writeln('Поиск:');
readln(a);
while not eof(f1) do begin readln(f1,l); if pos(a,l)<>0 then writeln(f2,l);end;
close(f2);
close(f1);
end.
[/syntax]
Ваши руки совершили идиотскую ошибку и будут оторваны!
[OK]
Medved
Сообщения: 256
Зарегистрирован: 14 фев 2008, 20:51
Контактная информация:

Вот первая часть. только пишет он в txt, в dbf я не умею.
[syntax='Delphi']
program lalala;
const maxn=100000;
var
a:string;arr:array[1..maxn]of record name:string; code:longint;end;
pos,i:int64;
f1,f2:text;

procedure doarr(l:string);
var k:longint;s:string;d:integer;
begin
k:=2;
while k<>length(l) do
begin
s:='';
while l[k]<>'=' do begin s:=s+l[k];inc(k); end;
arr[pos].name:=s;
s:='';
while l[k]<>'/' do begin s:=s+l[k];inc(k);end;
val(s,arr[pos].code,d);
inc(pos);
end;
end;

begin
assign(f1,'База.txt');
assign(f2,'Коды.txt');
reset(f1);
rewrite(f2);
while not eof(f1) do begin readln(f1,a); doarr(a);end;
for i:=1 to pos do write(f2,arr.name:15,' ');
writeln(f2);
for i:=1 to pos do write(f2,arr.code:15,' ');
close(f2);
close(f1);
end.
[/syntax]
Ваши руки совершили идиотскую ошибку и будут оторваны!
[OK]
vohakot
Сообщения: 2
Зарегистрирован: 29 мар 2008, 01:47
Контактная информация:

Спасибо огромное, а можно немного доработать и сделать 2 часть еще и с обратным условием. Если есть введенное значение, то строку удалять... если нет такого значения в строке, то оставлять?

Если не сложно, кто может скомпелировать в запускной файл эти два кода? А то проблематично найти Delphi, да и ламер я в этом деле.
Medved
Сообщения: 256
Зарегистрирован: 14 фев 2008, 20:51
Контактная информация:

Вот видоизмененная вторая часть:
[syntax='Delphi']
program lalala;

var
a,l:string; f1,f2:text;
begin
assign(f1,'База.txt');
assign(f2,'База_01.txt');
reset(f1);
rewrite(f2);
Writeln('Поиск:');
readln(a);
while not eof(f1) do begin readln(f1,l); if pos(a,l)=0 then writeln(f2,l);end;
close(f2);
close(f1);
end.
[/syntax]
Ваши руки совершили идиотскую ошибку и будут оторваны!
[OK]
Ответить