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

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7425
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 16 раз
Поблагодарили: 51 раз

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

Сообщение Игорь Столяров »

Привет всем !

Подскажите пожалуйста, можно ли как-то организовать групповую обработку файлов ?
Т.е. создаем некий список файлов (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)) тоже не компилируется ... :(
Или это в принципе невозможно ?
За теми кто отстал - не возвращаться. (С) Кодекс
kreator
✯ Ветеран ✯
Сообщения: 5007
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 7 раз
Поблагодарили: 21 раз

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

Сообщение kreator »

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

Stream(File1)
Вот так пройдёт?
We are hard at work… for you. :)
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7425
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 16 раз
Поблагодарили: 51 раз

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

Сообщение Игорь Столяров »

Так конечно же пройдет ... ! :)
Но вопрос в том, что бы собрать файлы в список и выполнить однотипную обработку списка в цикле.

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

И здесь Stream() просто как пример вызова встроенной процедуры обработки файла.
На самом деле операций обработки каждого файла намного больше. :(
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
Admin
Администратор
Сообщения: 3963
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 28 раз
Поблагодарили: 22 раза
Контактная информация:

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

Сообщение 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

Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7425
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 16 раз
Поблагодарили: 51 раз

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

Сообщение Игорь Столяров »

Спасибо - хороший пример использования общего заголовка для обработки нескольких физических файлов одинаковой структуры.
В моем случае - все файлы имеют разную структуру ... :( Именно поэтому и пытаюсь перейти от файлов, к указателям на них ...
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7425
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 16 раз
Поблагодарили: 51 раз

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

Сообщение Игорь Столяров »

Забавно, но просто требовалось полное имя структуры файла.
Вот так работает (по примеру в первом сообщении):

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

  Loop i# = 1 to Records(Loc:QFile) by 1
    Get(Loc:QFile,i#)
    Stream(Loc:QFile.Loc:QName)   
  end    
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
Admin
Администратор
Сообщения: 3963
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 28 раз
Поблагодарили: 22 раза
Контактная информация:

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

Сообщение Admin »

Туда же, почитайте про команды WHAT, WHERE, WHO и т.д.
Это к вопросу о неизвестных структурах.
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7425
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 16 раз
Поблагодарили: 51 раз

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

Сообщение Игорь Столяров »

Спасибо, читал неоднократно и постоянно использую в работе.
Эти команды позволяют выполнять разбор внутренней структуры RECORD таблицы.
В данном случае это не требуется - просто нужно обработать большой список файлов:
проверить структуру (открыть), рассчитать кол-во записей, переключить в монопольный режим, очистить
(удаляя записи или EMPTY()), сжать. Т.е. внутренняя структура файла не интересна.
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3137
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 11 раз
Поблагодарили: 32 раза
Контактная информация:

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

Сообщение Дед Пахом »

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

  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    
А, вижу, уже без меня разобрались.
С уважением, ДП
Аватара пользователя
Admin
Администратор
Сообщения: 3963
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 28 раз
Поблагодарили: 22 раза
Контактная информация:

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

Сообщение Admin »

Игорь Столяров писал(а): В данном случае это не требуется
Да я уже понял. Я же не читаю. Сразу отвечаю :)
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Ответить