ABL и его забавный синтаксис ... в документации говорится, что каждая метка фильтра и спецификация файла фильтра являются выражением сами по себе.Вы можете пропустить пустые пары, они будут проигнорированы.Так что здесь это работает - элементы массива 5 - 10 пусты и лишены:
DEFINE VARIABLE cFileName AS CHARACTER NO-UNDO.
DEFINE VARIABLE cFilters AS CHARACTER NO-UNDO EXTENT 10.
DEFINE VARIABLE lChose AS LOGICAL NO-UNDO.
ASSIGN
cFilters[1] = "Text Files (*.txt)"
cFilters[2] = "*.txt"
cFilters[3] = "Comma-Separated Value Files (*.csv)"
cFilters[4] = "*.csv" .
SYSTEM-DIALOG GET-FILE cFileName
FILTERS cFilters[1] cFilters[2], cFilters[3] cFilters[4], cFilters[5] cFilters[6], cFilters[7] cFilters[8], cFilters[9] cFilters[10]
UPDATE lChose.
Или используйте .NET в качестве альтернативы:
DEFINE VARIABLE cFileName AS CHARACTER NO-UNDO.
DEFINE VARIABLE cFilters AS CHARACTER NO-UNDO.
DEFINE VARIABLE lChose AS LOGICAL NO-UNDO.
cFilters = "Text Files (*.txt)|*.txt|Comma-Separated Value Files (*.csv)|*.csv".
DEFINE VARIABLE oSystemDialog AS System.Windows.Forms.OpenFileDialog NO-UNDO .
DEFINE VARIABLE oDialogResult AS System.Windows.Forms.DialogResult NO-UNDO .
oSystemDialog = NEW System.Windows.Forms.OpenFileDialog () .
oSystemDialog:Filter = cFilters .
oSystemDialog:CheckFileExists = TRUE .
oSystemDialog:RestoreDirectory = TRUE .
WAIT-FOR oSystemDialog:ShowDialog () SET oDialogResult .
IF Progress.Util.EnumHelper:AreEqual (oDialogResult, System.Windows.Forms.DialogResult:OK) THEN
DO:
ASSIGN lChose = TRUE
cFileName = oSystemDialog:FileName.
END.
ELSE
ASSIGN lChose = FALSE