Показать сообщение отдельно
  #8  
Старый 30.08.2012, 11:30
Аватар для ~TB~
~TB~ ~TB~ вне форума
Начинающий
 
Регистрация: 17.02.2006
Адрес: Казахстан
Сообщения: 172
Версия Delphi: XE
Репутация: 1500
По умолчанию

Качаешь отсюда библиотеку для работы с регулярными выражениями:
http://www.regular-expressions.info/delphi.html

Делаешь подобный модуль:
Код:
unit RegExp;

interface

uses
  {Standart}
  SysUtils, Windows, Classes,
  {Special}
  PerlRegEx;

type
  TRegExp = class
  private
    FRegExp: TPerlRegEx;
  protected
    property RegExp: TPerlRegEx read FRegExp write FRegExp;
  public
    function Work(Exp, Text: UTF8String): UTF8String;
    constructor Create;
    destructor Destroy; override;
  end;

implementation

{ TRegExp }

constructor TRegExp.Create;
begin
  inherited Create;
  FRegExp := TPerlRegEx.Create;
end;

destructor TRegExp.Destroy;
begin
  FreeAndNil(FRegExp);
  inherited Destroy;
end;

function TRegExp.Work(Exp, Text: UTF8String): UTF8String;
begin
  Result := '';
  RegExp.Subject := Text;
  RegExp.RegEx := Exp;
  if RegExp.Match then
    Result := RegExp.MatchedText;
end;

end.

В программке своей подключаешь модуль описанный выше и обрабатываешь свой INI файлик, запихивая данные, например, в массив записей. Примерно так:
Код:
var
  SessionList: TSessionArray; // это массив записей, надеюсь пример приводить не нужно?
...
procedure WhatIMustDo(var SessionList: TSessionArray); // Тут некая процедура заполнения некого объявленного массива
var
  i: Integer;
begin
  for i := 0 to MyINIFile.Count - 1 do
  begin
    SessionList.Name := PChar(Utf8ToAnsi(RegExp.Work('^(.*?)(?=;)', AnsiToUTF8(MyINIFile[i])))); // Имя участника
    SessionList.Time := PChar(Utf8ToAnsi(RegExp.Work('(?<=;)(.*?)(?=;)', AnsiToUTF8(MyINIFile[i])))); // Время акта
    SessionList.Status := PChar(Utf8ToAnsi(RegExp.Work('(?<=;)(.*?)(?=\r\n)', AnsiToUTF8(MyINIFile[i])))); // Пришел-Ушел
  end;
...
// Ну а дальше играйся с полученными результатами

IDE под рукой нет, могут быть синтаксические ошибки, но логика должна быть верной. Вроде как. В регулярные выражения могла закрасться ошибка, так что проверяй все.

По графикам тут что-то такое было, если не то, все равно ознакомься - принцип будет тот же.
__________________
00110001 00101100 00110110 00110001 00111000 00110000 00110011 00110011 00111001 00111000 00111000 00110111 00110100 00111001 00111000 00111001 00110100 00111000 00110100 00111000 00110010 00110000 00110100 00110101 00111000 00110110 00111000 00110011 00110100 00110011 00110110 00110101 00110110
Ответить с цитированием