IDtProvider.FilterIf

Синтаксис Fore

FilterIf: IExpression;

Синтаксис Fore.NET

FilterIf: Prognoz.Platform.Interop.ForeSystem.IExpression;

Описание

Свойство FilterIf возвращает условие загрузки записей из источника данных.

Комментарии

Для корректной работы условия должно быть задано свойство IDtObject.Metabase.

Пример Fore

Для выполнения примера в файловой системе предполагается наличие файла «D:\res_export.txt».

Содержимое файла res_export.txt

Добавьте ссылки на системные сборки: Dal, Dt, Metabase.

Sub UserProc;
Var
    mb: IMetabase;
    TextProvider: IDtTextProvider;
    v: Array;
    i: Integer;
    Errors: IDtErrors;
    Error: IDtError;
Begin
    mb := MetabaseClass.Active;
    // Создаем объект для импорта из тестового файла
    TextProvider := New DtTextProvider.Create;
    // Указываем импортируемый файл
    TextProvider.File := "D:\res_export.txt";
    // Задаем параметры импорта
    TextProvider.FormatType := DtTextFormatType.Delimited;
    TextProvider.DelimitedColumnDelimiter := ";";
    TextProvider.DelimitedTextQualifier := """";
    TextProvider.Encoding := "WIN";
    // Указываем, что импортируемый файл содержит заголовки
    TextProvider.RangeHasHeader := True;
    // Выполняем чтение полей из импортируемого файла
    TextProvider.FieldsFromFile;
    // Находим поле «Value» и указываем, что оно вещественного типа
    TextProvider.Fields.FindByName("Value").DataType := DbDataType.Float;
    // Задаём репозиторий
    TextProvider.Metabase := mb;
    // Задаем условие фильтрации
    TextProvider.FilterIf.AsString := "VALUE > 2.8";
    // Задаём параметры обработки ошибок
    Errors := TextProvider.FetchErrors;
    Errors.MaxErrors := -1;
    Errors.MaxItems := -1;
    // Открываем источник данных
    TextProvider.Open;
    // Загружаем записи и выводим их в окно консоли
    While Not TextProvider.Eof Do
        TextProvider.Fetch(v);
        For i := 0 To v.Length - 1 Do
            Debug.Write(v[i] + " ");
        End For;
        Debug.WriteLine("");
    End While;
    // Выводим информацию об импорте в окно консоли
    Debug.WriteLine("Количество прочитанных строк (без учета фильтра): " + TextProvider.ReadingRowsTotalCount.ToString);
    Debug.WriteLine("Количество прочитанных строк (с учетом фильтра): " + TextProvider.ReadingRowsCount.ToString);
    // Выводим информацию об ошибках импорта
    For i := 0 To Errors.Count - 1 Do
        Error := Errors.Item(i);
        Debug.WriteLine("Номер строки с ошибкой: " + Error.Row.ToString);
        Debug.WriteLine("Ошибка: " + Error.Message)
    End For;
    // Закрываем источник данных
    TextProvider.Close;
End Sub UserProc;

В результате выполнения примера будет настроен импорт из файла «D:\res_export.txt». Импортироваться будут только строки, в которых значение атрибута «Value» больше значения «2,8». Информация об импорте и ошибках импорта будет выведена в окно консоли.

Пример Fore.NET

Необходимые требования и результат выполнения примера Fore.NET совпадают с примером Fore.

Imports Prognoz.Platform.Interop.Dal;
Imports Prognoz.Platform.Interop.Dt;

Public Shared Sub Main(Params: StartParams);
Var
    mb: IMetabase;
    TextProvider: IDtTextProvider;
    v: Array;
    i: Integer;
    Errors: IDtErrors;
    Error: IDtError;
Begin
    mb := Params.Metabase;
    // Создаем объект для импорта из тестового файла
    TextProvider := New DtTextProvider.Create();
    // Указываем импортируемый файл
    TextProvider.File := "D:\res_export.txt";
    // Задаем параметры импорта
    TextProvider.FormatType := DtTextFormatType.tftDelimited;
    TextProvider.DelimitedColumnDelimiter := ";";
    TextProvider.DelimitedTextQualifier := """";
    TextProvider.Encoding := "WIN";
    // Указываем, что импортируемый файл содержит заголовки
    TextProvider.RangeHasHeader := True;
    // Выполняем чтение полей из импортируемого файла
    TextProvider.FieldsFromFile();
    // Находим поле «Value» и указываем, что оно вещественного типа
    TextProvider.Fields.FindByName("Value").DataType := DbDataType.ddtFloat;
    // Задаём репозиторий
    TextProvider.Metabase := mb;
    // Задаем условие фильтрации
    TextProvider.FilterIf.AsString := "VALUE > 2.8";
    // Задаём параметры обработки ошибок
    Errors := TextProvider.FetchErrors;
    Errors.MaxErrors := -1;
    Errors.MaxItems := -1;
    // Открываем источник данных
    TextProvider.Open();
    // Загружаем записи и выводим их в окно консоли
    While Not TextProvider.Eof Do
        TextProvider.Fetch(Var v);
        For i := 0 To v.Length - 1 Do
            System.Diagnostics.Debug.Write(v[i] + " ");
        End For;
        System.Diagnostics.Debug.WriteLine("");
    End While;
    // Выводим информацию об импорте в окно консоли
    System.Diagnostics.Debug.WriteLine("Количество прочитанных строк (без учета фильтра): " + TextProvider.ReadingRowsTotalCount().ToString());
    System.Diagnostics.Debug.WriteLine("Количество прочитанных строк (с учетом фильтра): " + TextProvider.ReadingRowsCount().ToString());
    // Выводим информацию об ошибках импорта
    For i := 0 To Errors.Count - 1 Do
        Error := Errors.Item[i];
        System.Diagnostics.Debug.WriteLine("Номер строки с ошибкой: " + Error.Row.ToString());
        System.Diagnostics.Debug.WriteLine("Ошибка: " + Error.Message)
    End For;
    // Закрываем источник данных
    TextProvider.Close();
End Sub;

См. также:

IDtProvider