Страница 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)) тоже не компилируется ... :(
Или это в принципе невозможно ?

Групповая обработка файлов

Добавлено: 24 Июнь 2015, 14:19
kreator

Код: Выделить всё

Stream(File1)
Вот так пройдёт?

Групповая обработка файлов

Добавлено: 24 Июнь 2015, 14:28
Игорь Столяров
Так конечно же пройдет ... ! :)
Но вопрос в том, что бы собрать файлы в список и выполнить однотипную обработку списка в цикле.

Иначе придется выполнять:
Stream(File1)
Stream(File2)
Stream(File3)
....
Stream(File200)
Stream(File201)
....

И здесь Stream() просто как пример вызова встроенной процедуры обработки файла.
На самом деле операций обработки каждого файла намного больше. :(

Групповая обработка файлов

Добавлено: 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
Игорь Столяров
Спасибо - хороший пример использования общего заголовка для обработки нескольких физических файлов одинаковой структуры.
В моем случае - все файлы имеют разную структуру ... :( Именно поэтому и пытаюсь перейти от файлов, к указателям на них ...

Групповая обработка файлов

Добавлено: 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
Игорь Столяров писал(а): В данном случае это не требуется
Да я уже понял. Я же не читаю. Сразу отвечаю :)