IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

> Считывание текстового файла сложной структуры, Работа с файлами
сообщение
Сообщение #1


Ветеран Броуновского Движения
***

Группа: Пользователи
Сообщений: 281
Пол: Мужской
Реальное имя: Сергей

Репутация: -  0  +


Уважаемые, столкнулся с такой непростой задачкой, как работа с текстовым файлом сложной структуры. Нужно считать с него коды станций, номера платежей, суммы и коды статей. И дату. Желательно в табличку запихнуть для удобства работы. Единственный вариант, который приходит в голову, это построчное считывание и анализ. Подскажите какими методами такое можно провернуть?

Сообщение отредактировано: Atreides -


Прикрепленные файлы
Прикрепленный файл  razsb.txt ( 3.45 килобайт ) Кол-во скачиваний: 293


--------------------
Отрадно спать, отрадней камнем быть, О, этот век, преступный и постыдный, Не жить, не чувствовать - удел завидный. Прошу, молчи, не смей меня будить!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Ветеран Броуновского Движения
***

Группа: Пользователи
Сообщений: 281
Пол: Мужской
Реальное имя: Сергей

Репутация: -  0  +


Еще один маленький вопросик. Надо в табличку положить коды станций, но чет они у меня не хотят вставать как нужно и "размножаться". И еще как заставить стринггрид заполняться строка в соответствии с записями, а то я руками вбухал 200, что не есть хорошо. Во второй грид гружу по выборке.
procedure TForm4.Button5Click(Sender: TObject);
var
F:TextFile; //файл
fName: String[100]; // имя файла
buf: String[127]; //буфер для чтения строк
i:integer; //шагалка
stroka:string; //строка
year,mounth:string; //месяц и год введение пользователем
data1,data2:string; //дата считываемая и отображаемая
name_stat:string;
kod_stat:string;
j:integer;
kod_plateg:string; // код платежа

Kod_state:string;
{ begin
if Form4.Edit3.Text=null then
ShowMessage('Не указан год загрузки!!!');
exit;
if Form4.ComboBox1.Text=null then
ShowMessage('Не выбран месяц загрузки');
exit; }

begin

fName:=Form4.Edit1.Text; //забираем путь
AssignFile(f,fName);
try
Reset(F); // открыть для чтения
except
on EInOutError do
begin
ShowMessage('Ошибка доступа к файлу'+fName);
exit;
end
end;
i:=1; j:=1;
while not EOF(f) do

begin
readln(f,buf); // прочитать строку из файла
// длина строки в образце фиксированная.


if buf[27]='З' then
Form4.Edit2.Text:=copy(buf,30,20);



if POS(':',buf[1])>0 then
continue
else
begin
if POS('(',buf[1])>0 then
continue
else
begin
if POS(' ',buf[1])>0 then
continue;


if buf[1]='|' then
begin
if POS('ЕЛЕНИЕ',buf)>0 then
continue
else
begin
if POS('ПО СТАНЦИИ',buf)>0 then
Form4.StringGrid1.Cells[5,j]:=copy(buf,17,7);
if POS('СТАНЦИИ',buf)>0 then
continue
else
begin
if POS('ГО ПО ОТДЕ',buf)>0 then
continue
else
begin
if POS('ГО ПО ДОРО',buf)>0 then
continue
else
begin
Form4.StringGrid1.Cells[0,i]:=copy(buf,7,10);
Form4.StringGrid1.Cells[1,i]:=copy(buf,20,3);
Form4.StringGrid1.Cells[2,i]:=copy(buf,26,79);
Form4.StringGrid1.Cells[3,i]:=copy(buf,106,13);
Form4.StringGrid1.Cells[4,i]:=copy(buf,121,4);



if Form4.StringGrid1.Cells[0,i]<>' ' then
name_stat:=Form4.StringGrid1.Cells[0,i];

if Form4.StringGrid1.Cells[0,i]=' ' then
Form4.StringGrid1.Cells[0,i]:=name_stat;


if Form4.StringGrid1.Cells[5,i]<>'123' then
Kod_stat:= Form4.StringGrid1.Cells[5,i];
// это я тут пытался присвоить имена
if Form4.StringGrid1.Cells[5,i]='' then
Form4.StringGrid1.Cells[5,i]:=Kod_stat;
inc(j);
inc(i);
end;
end;
end;
end;
end;
end;
end;
end;

CloseFile(f); // закрыть файл

begin
mounth:=Form4.ComboBox1.Text; //месяц клиента
year:=Form4.Edit3.Text; // год клиента
data1:=mounth + ' ' + year + ' Г.';// дата клиента
data2:=Form4.Edit2.Text; // дата из файла
Form4.Edit4.Text:=data1;
if data1<>data2 then
begin
ShowMessage('Дата загрузки не соответствует указанной дате');
Form4.Button6.Enabled:=False;
end;
if data1=data2 then
begin
ShowMessage('Дата ввода корректна');
Form4.Button6.Enabled:=True;
Form4.ComboBox1.Enabled:=False;
Form4.Edit3.Enabled:=False;
end;

Form4.SocketConnection1.Connected:=false;
Form4.SocketConnection1.Connected:=true;
Form4.SocketConnection1.AppServer.openbase('ORA8','fs_master','fs');
kod_plateg:='select KOD_PLATEG_FO7 from SPR_PLATEG_FO7';
kod_state:='select KODEXP7 from SPR_MSTO where KODEXP <> 0 ';
Form4.ClientDataSet1.close;

Form4.ClientDataSet1.DataRequest(kod_plateg);
Form4.ClientDataSet1.open;
// Form4.ClientDataSet1.DataRequest(kod_state);
// Form4.ClientDataSet1.open;
while not Form4.ClientDataSet1.eof do
begin

for i := 1 to StringGrid1.RowCount - 1 do
begin
kod_plateg:=Form4.ClientDataSet1.fieldbyname('KOD_PLATEG_FO7').asstring;
// kod_state:=Form4.ClientDataSet1.fieldbyname('KODEXP7').asstring;


if Form4.StringGrid1.Cells[1,i]= kod_plateg then //выборка нужных платежей
begin
Form4.StringGrid2.Cells[0,i]:=Form4.StringGrid1.Cells[0,i];
Form4.StringGrid2.Cells[1,i]:=Form4.StringGrid1.Cells[1,i];
Form4.StringGrid2.Cells[2,i]:=Form4.StringGrid1.Cells[2,i];
Form4.StringGrid2.Cells[3,i]:=Form4.StringGrid1.Cells[3,i];
Form4.StringGrid2.Cells[4,i]:=Form4.StringGrid1.Cells[4,i];
Form4.StringGrid2.Cells[5,i]:=Form4.StringGrid1.Cells[5,i];

end;

end;

Form4.ClientDataSet1.next;

end;
Form4.ClientDataSet1.close;


end;

Form4.Edit5.Text := Format('%.2d', [Form4.ComboBox1.ItemIndex + 1])+ '.' +Form4.Edit3.text;
end;


--------------------
Отрадно спать, отрадней камнем быть, О, этот век, преступный и постыдный, Не жить, не чувствовать - удел завидный. Прошу, молчи, не смей меня будить!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Atreides   Считывание текстового файла сложной структуры   29.01.2010 0:58
Lapp   вариант, который приходит в голову, это построчное…   29.01.2010 6:59
amega   а что если текстовый файл заменить на екселевкий?   29.01.2010 16:42
Гость   а что если текстовый файл заменить на екселевкий?…   29.01.2010 18:14
Гость   сорри не досмотрел приложение, походу файл прога д…   29.01.2010 18:17
Atreides   Да файл мне прога выкидывает, но не моя и менять я…   29.01.2010 21:56
feniks25   ширина стобцов меняться может? если нет то все упр…   29.01.2010 23:18
Atreides   Да все поля статичны. Ну вот как? Мне только коды …   30.01.2010 2:56
Lapp   Да все поля статичны. Ну вот как? Мне только коды …   30.01.2010 3:16
volvo   Читаешь файл в строку, и в цикле вытягиваешь из не…   30.01.2010 3:17
Atreides   С регулярными там чет все не по-русски :-( как зас…   1.02.2010 18:20
volvo   Безо всяких регэкспов: procedure TForm1.ParseClick…   1.02.2010 19:29
Гость   надо и так попробовать, спасибо. Дату я забрал, пр…   2.02.2010 1:52
Atreides   Клевый код, очень быстро работает. Вот с датой про…   3.02.2010 2:17
Гость   Решил просто перебирать тупо строки и писать в Str…   4.02.2010 0:36
Atreides   Вроде разобрался с заполнение, только из пяти стол…   4.02.2010 12:58
Гость   Разобрался! //загрузка данных в табличку pro…   6.02.2010 1:53
Atreides   Еще один маленький вопросик. Надо в табличку полож…   8.02.2010 22:28
feniks25   напиши сначала StringGrid1.RowCount:=2; а…   18.02.2010 17:03
Atreides   о, щас попробую. Размножаться - это если имя станц…   20.02.2010 3:23


 Ответить  Открыть новую тему 
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 26.06.2024 18:24
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name