Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Поиск заданного фрагмента в файле


Страницы:   1 2 3

Pretender ©   (2006-04-25 12:13:00) 

Всем здравствуйте! :)

ПОдскажите, пожалуйста, вот какую вещь: есть текстовый файл, содержащий строки вида

STR00234 6058     1   3  + 04.04.2006Бюро экспертизы проектов и смет

Необходимо организовать по ней поиск заданного значения, как: считать строку, если есть в строке '1' и '3' и '+', то увеличить значения переменных per1, per2, per3 на единицу, считать слледующую строку и т.д. Помогите разобраться, пожалуйста!

Вот что пока получилось:

procedure TForm1.Button1Click(Sender: TObject);
var
F: Textfile;
res, i, KolStr: integer;
answ : word;
mas: array of string[80];
st1: string;

begin

AssignFile(F, fname);

repeat

{$I-}

Reset(F);

{$I+}

res:=IOResult;

if res <> 0

then answ:=MessageDlg('Ошибка открытия '

+ fname + #13 + 'Повторить попытку?',mtWarning,[mbYes, mbNo],0);
until (res= 0) OR (answ = mrNo);

if res <> 0

then exit;

KolStr:=LinesCount(fname); //функция подсчёта количества строк в файле
SetLength(mas, KolStr); //создаю динамический массив
ListBox1.Items.Clear;

for i:=0 to KolStr do begin
Readln(F, St1);
mas[i]:=st1;
ListBox1.Items.Add(StrDosToWin(mas[i]));
end;

Label3.Caption := IntToStr(KolStr);

end;

function StrDosToWin(AString : string) : string;
begin
Result := AString;
OemToChar(Pointer(Result), Pointer(Result));
end;

Надо сказать, что все эти операции с массивом и листбоксом делались для проверки. Вообще же, я хотел разбить строку по элементам и каждый элемент занести в ячейку массива, а уж осуществить выборку по массиву будет проще простого. Вот только не знаю как это сделать, может будут какие предложения?


Джо   (2006-04-25 15:26:00) [41]

> [10] Pretender ©   (25.04.06 15:22)
> А если не фиксирована?

Так она фиксирована или нет? Ты уж определись, пожалуйста. Вряд ли кто-то захочет писать тут тебе 15 вариант "на всякий случай" задаром.


Pretender   (2006-04-25 15:22:00) [42]

А если не фиксирована?


Джо   (2006-04-25 15:17:00) [43]

[8]
> позиции подстрок фиксирована

> обрезать лишний пробелы



Окончательно перешел на турецкий язык, к чему бы это? :*(


Джо   (2006-04-25 15:16:00) [44]

Если позиции подстрок фиксирована, то можно воспользоваться функцией Copy. Т.е, например, если нужные значения находятся в позициях 1,10,15..., то получить второе значение можно так:
Copy (Исходная_строка,10,5) и обрезать лишний пробелы справа.


Pretender   (2006-04-25 15:10:00) [45]


> Каждое поле находится в фиксированной позиции строки?

Вроде бы да. Если смотреть в фаре по F4 (редактирование), то поля фиксированы. Если по тому, как они в листбокс заносятся, то нет. В качестве разделителя выступает пробел, но не один, т.е. где-то один, а где-то нет. Если б мог, что приложил бы сам файл, но не знаю как тут аттачить.


Джо   (2006-04-25 14:59:00) [46]

Каждое поле находится в фиксированной позиции строки? Или нет? Что выступает в качестве разделителя? Табуляторы или пробелы. В общем, нормально опиши формат файла.


Pretender   (2006-04-25 14:56:00) [47]


> for i:=0 to KolStr - 1

Согласен, сейчас попробовал - в листбоксе стало на одну строчку меньше, как в файле :) А по существу?


MBo   (2006-04-25 14:45:00) [48]

>Не ошибка.
И всё-таки ошибка.

for i:=0 to KolStr - 1


Pretender   (2006-04-25 14:35:00) [49]


> а строчка то чем нибудь разделена или фиксированное количество
> символов под каждую позицию определено

Эта строчка выглядит так, как я привёл - разделена пробелами. По идее, наверно, нужно искать пробелы до тех пор, пока не встретится символ, а затем определять длину всего слова, заносить её в массиы и искать дальше. Я правильно думаю?

> Это ошибка. Элементом на 1 меньше...

Не ошибка. В динамических массивах нумерация идет с 0 (если не ошибаюсь). Если поставить 1, то приложение "вылетает".


Johnmen   (2006-04-25 13:22:00) [50]


> for i:=0 to KolStr do begin


Это ошибка. Элементом на 1 меньше...


Palladin   (2006-04-25 13:14:00) [51]

а строчка то чем нибудь разделена или фиксированное количество символов под каждую позицию определено?


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо