Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Компоненты и классы
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 06.07.2009, 07:52
Аватар для artzub
artzub artzub вне форума
Прохожий
 
Регистрация: 12.08.2008
Адрес: крск
Сообщения: 12
Репутация: 10
По умолчанию Что быстрее TStringList или Copy

Привет всем!!!
Такой вот вопрос меня волнует:

1. есть метод Split
Код:
function Split (const S: String; Separator: 
     String; MyStringList: TStringList = nil) : TStringList;
var
    Start: integer;
    wantCount : Integer;
begin
   Result := TStringList.Create();
   if Assigned(MyStringList) then
        Result.AddStrings(MyStringList);
   Start := 0;
   while Start <= Length(S) do
        Result.Add(GetNextToken(S, Separator, Start)) ;
end;
Код:
function GetNextToken (S: string; Separator: 
    String; var StartPos: integer): String;
var 
    Index: integer;
begin
    Result := '';

    if StartPos > length(S) then
        Exit;

    S := Copy(S, StartPos + 1, length(S));
    Index := pos(Separator, S);

    if Index = 0 then
        Index := length(S)
    else
        Index := Index - 1;

    Result := Copy(S, 0, Index);
    
    StartPos := StartPos + Index + 1;
end;
2. следующие:
Код:
var
    curFile : TstringList;
    curLine : TStirngList;
    curIndex : array[0..10] of integer;
begin
    curFile := TStirngList.Create();
    try
        curFile.LoadeFromFile('1.txt');
        for i = 0 to curFile.Count - 1 do
        begin
            curLine := Split(curFile[i], ';');
            try
                for j = 0 to Params.Count - 1 do
                begin
                    case j of
                        0, 1, 3 :
                            if curIndex[j] < curLine.Count - 1 then
                                Params[j].AsString := curLine[curIndex[j]];
                        ...
                        
                    end;
                end;
            finally
                FreeAndNil(curLine);
            end;
        end;
    finally
        FreeAndNil(curFile);
    end;
end;

Не будет ли быстрей переделать так чтоб использовать метод Copy?

допустим так:
Код:
function GetDataToIndex(inStr : String; index : 
    integer; delimiter : string) : string;
var 
    i : integer;
begin
    Result := '';
    while (inStr <> '') and 
          (pos(delimiter, inStr) > 0) do
    begin
        Result := copy(inStr, 0, pos(delimiter, inStr) - 1);
        if i = index then
            exit;
        inStr := copy(inStr, pos(delimiter, inStr) + 1, Length(inStr));
    end;
end;
и естественно использовать вот так:
Код:
var
    curFile : TstringList;
    curIndex : array[0..10] of integer;
begin
    curFile := TStirngList.Create();
    try
        curFile.LoadeFromFile('1.txt');
        for i = 0 to curFile.Count - 1 do
        begin
            for j = 0 to Params.Count - 1 do
            begin
                case j of
                    0, 1, 3 :
                        Params[j].AsString := 
                               GetDataToIndex(curFile[i], curIndex[j], ';');
                    ...
                    
                end;
            end;
        end;
    finally
        FreeAndNil(curFile);
    end;
end;
__________________
Жизнь хитрая штука - как только все карты на руках — она решает сыграть с тобой в шахматы

Последний раз редактировалось artzub, 06.07.2009 в 08:03.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 14:50.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter