1 (edited by Kupidon 2019-04-14 19:21:36)

Topic: Почему не работает условие if?

Может конечно и туплю, но не пойму почему не работает IF:

///заполнение таблицы логов
procedure Form1_BSearchLog_OnClick (Sender: string; var Cancel: boolean);
var
    NxTextColumn: TNxTextColumn;
    i, i1, j, c: integer;
    SL: TStringList;
    arrStr: array of string;
    SerNum, SerNumArr, InvNum, f: string;
begin
    SerNum := Form1.SerNum.Text;
    InvNum := Form1.InvNum.Text;
    //showMessage (SerNum+' '+InvNum);
    // create columns
    SL := TStringList.Create; //создаем список строк
    F := ExtractFilePath( Application.ExeName ) + 'log.txt';
    SL.LoadFromFile(f);

    c := SL.count - 1;
    frmLogEquip.TabLogEq.Columns.Clear;
    frmLogEquip.TabLogEq.AddRow(c);

    for i:=0 to 9 do   //добавляем колонки и заголовки
    begin
        try
            frmLogEquip.TabLogEq.Columns.Add(TNxTextColumn);
            //frmLogEquip.TabLogEq.Columns[i].Color := clWhite;
            except
        end;
    end;

    frmLogEquip.TabLogEq.Columns[0].Header.Caption := 'Дата';
    frmLogEquip.TabLogEq.Columns[1].Header.Caption := 'Время ' ;
    frmLogEquip.TabLogEq.Columns[2].Header.Caption := 'Статус';
    frmLogEquip.TabLogEq.Columns[3].Header.Caption := 'Тип';
    frmLogEquip.TabLogEq.Columns[4].Header.Caption := 'Модель';
    frmLogEquip.TabLogEq.Columns[5].Header.Caption := 'Сер. номер';
    frmLogEquip.TabLogEq.Columns[6].Header.Caption := 'Инв. номер';
    frmLogEquip.TabLogEq.Columns[7].Header.Caption := 'Место';
    frmLogEquip.TabLogEq.Columns[8].Header.Caption := 'Комментарий';
    frmLogEquip.TabLogEq.Columns[9].Header.Caption := 'Пользователь';

    i1 := 1; //индекс выборочных строк

    for i := 0 to c do   //заполнение таблицы из файла
    begin
        arrStr:= SplitString(sl[i], ';');

        ShowMessage (arrStr[5] + ' ' + SerNum + #13#10 + arrStr[6] + ' ' + InvNum ); //проверка

        if (SerNum = arrStr[5]) AND (InvNum = arrStr[6]) then    //в цикл не заходит!??
            begin
                for j := 0 to 9 do
                begin
        frmLogEquip.TabLogEq.Cells[j,i1] := VarToStr(arrStr[j]);
        i1 := i1+1;
        //showMessage (frmLogEquip.TabLogEq.Cells[j,i]);
                end;
            end;
    end;
//frmLogEquip.TabLogEq.LoadFromTextFile(f, ';');
frmLogEquip.TabLogEq.BestFitColumns(bfBoth); //автоподбор ширины по содержимому ячеек и названию колонок
end;

begin

end.
Post's attachments

Attachment icon if.rar 295.26 kb, 213 downloads since 2019-04-14 

Re: Почему не работает условие if?

Получается, что во время формирования массива им нельзя пользоваться?..

Re: Почему не работает условие if?

Проблема в данных, в log файле между данными присутствует не только разделитель ; но и пробел, который попадает в первый символ.


Так можно увидеть, что между восклицательным знаком и данными есть пробел, поэтому условие не срабатывает, т.к. не учитывает это

ShowMessage ('!'+arrStr[5] + ' ' + SerNum + #13#10 + arrStr[6] + ' ' + InvNum ); //проверка
Dmitry.

4 (edited by Kupidon 2019-04-15 14:18:26)

Re: Почему не работает условие if?

Да, спасибо! Но что делать если не изменять лог файл?
При записи

arrStr:= SplitString(sl[i], '; ');

пропускаются значения.. может быть через обозначение пробела #32?