Страница 1 из 1
Групповая обработка файлов
Добавлено: 24 Июнь 2015, 13:37
Игорь Столяров
Привет всем !
Подскажите пожалуйста, можно ли как-то организовать групповую обработку файлов ?
Т.е. создаем некий список файлов (QUEUE), а потом выполняем с ним типовые операции.
Т.е. что-то вроде/
Код: Выделить всё
Data
File1 File ....
end
Loc:QFile Queue
Loc:QName &File
end
Code
Loc:QName &= File1
Add(Loc:QName)
Loop i# = 1 to Records(Loc:QFile) by 1
Get(Loc:QFile,i#)
Stream(Loc:QName) ! Вот здесь ошибка компиляции
end
Насколько я понимаю, надо как-то по адресу структуры файла Loc:QName получить его значение ?!
Ничего не понимаю. Вариант с Stream(Loc:QName(Prop:Label)) тоже не компилируется ...
![Sad :(](./images/smilies/icon_sad.gif)
Или это в принципе невозможно ?
Групповая обработка файлов
Добавлено: 24 Июнь 2015, 14:19
kreator
Групповая обработка файлов
Добавлено: 24 Июнь 2015, 14:28
Игорь Столяров
Так конечно же пройдет ... !
![Smile :)](./images/smilies/icon_smile.gif)
Но вопрос в том, что бы собрать файлы в список и выполнить однотипную обработку списка в цикле.
Иначе придется выполнять:
Stream(File1)
Stream(File2)
Stream(File3)
....
Stream(File200)
Stream(File201)
....
И здесь Stream() просто как пример вызова встроенной процедуры обработки файла.
На самом деле операций обработки каждого файла намного больше.
![Sad :(](./images/smilies/icon_sad.gif)
Групповая обработка файлов
Добавлено: 24 Июнь 2015, 14:49
Admin
Код: Выделить всё
FFile FILE,DRIVER('ASCII'),PRE(F),CREATE
RECORD
Line STRING(256)
END
END
FilesQueue QUEUE,PRE(FilesQueue)
FileName STRING(256)
END
CODE
FilesQueue.FileName = 'demo1.txt'
ADD(FilesQueue)
FilesQueue.FileName = 'demo2.txt'
ADD(FilesQueue)
FilesQueue.FileName = 'demo3.txt'
ADD(FilesQueue)
FilesQueue.FileName = 'demo4.txt'
ADD(FilesQueue)
LOOP W# = 1 TO RECORDS(FilesQueue)
GET(FilesQueue, W#)
FFile{PROP:Name} = FilesQueue.FileName
OPEN(FFile)
IF ERRORCODE()
MESSAGE(ERROR())
CYCLE
END
SET(FFile,1)
LOOP
NEXT(FFile)
IF ERRORCODE() THEN BREAK END
! process record
END
CLOSE(FFile)
END
Групповая обработка файлов
Добавлено: 24 Июнь 2015, 16:12
Игорь Столяров
Спасибо - хороший пример использования общего заголовка для обработки нескольких физических файлов одинаковой структуры.
В моем случае - все файлы имеют разную структуру ...
![Sad :(](./images/smilies/icon_sad.gif)
Именно поэтому и пытаюсь перейти от файлов, к указателям на них ...
Групповая обработка файлов
Добавлено: 24 Июнь 2015, 16:31
Игорь Столяров
Забавно, но просто требовалось полное имя структуры файла.
Вот так работает (по примеру в первом сообщении):
Код: Выделить всё
Loop i# = 1 to Records(Loc:QFile) by 1
Get(Loc:QFile,i#)
Stream(Loc:QFile.Loc:QName)
end
Групповая обработка файлов
Добавлено: 24 Июнь 2015, 16:57
Admin
Туда же, почитайте про команды WHAT, WHERE, WHO и т.д.
Это к вопросу о неизвестных структурах.
Групповая обработка файлов
Добавлено: 24 Июнь 2015, 17:03
Игорь Столяров
Спасибо, читал неоднократно и постоянно использую в работе.
Эти команды позволяют выполнять разбор внутренней структуры RECORD таблицы.
В данном случае это не требуется - просто нужно обработать большой список файлов:
проверить структуру (открыть), рассчитать кол-во записей, переключить в монопольный режим, очистить
(удаляя записи или EMPTY()), сжать. Т.е. внутренняя структура файла не интересна.
Групповая обработка файлов
Добавлено: 24 Июнь 2015, 17:18
Дед Пахом
Код: Выделить всё
PROGRAM
MAP
END
File1 FILE,DRIVER('ASCII'),PRE(File1),CREATE
RECORD
Line STRING(256)
END
END
Loc:QFile Queue
Loc:QName &File
end
CODE
Loc:QFile.Loc:QName &= File1
Add(Loc:QFile)
Loop i# = 1 to Records(Loc:QFile) by 1
Get(Loc:QFile,i#)
Stream(Loc:QFile.Loc:QName) ! Вот здесь ошибка компиляции, а теперь нет
end
А, вижу, уже без меня разобрались.
Групповая обработка файлов
Добавлено: 25 Июнь 2015, 7:54
Admin
Игорь Столяров писал(а): В данном случае это не требуется
Да я уже понял. Я же не читаю. Сразу отвечаю
![Smile :)](./images/smilies/icon_smile.gif)