Чтение данных из файла

Страницы: 1
RSS
Чтение данных из файла
 
ПРОГРАММА:
local MySec = {}
local AVT = AllocTable()

function main()
   AddColumn(AVT, 1, "ClassCod", true, QTABLE_STRING_TYPE, 12)
   AddColumn(AVT, 2, "SecCod", true, QTABLE_STRING_TYPE, 12)
   CreateWindow(AVT)
   SetWindowCaption(AVT, "Table")
   SetWindowPos(AVT, 0, 0, 200, 200)

   local file = io.open ('D:\\SYS\\ATC Sec', 'r')
   file :read()
   local i = 0
   while true do
       i=i+1
       MySec[i..'']= {}
       MySec[i..'']['CCod'] = file :read(8)
       if MySec[i..'']['CCod'] == nil then
           break
       end
       file :seek (cur,1)
       MySec[i..'']['SCod'] = file :read(6)
   
       InsertRow(AVT, -1)
       SetCell(AVT, 1, 1, MySec[i..'']['CCod'])
       SetCell(AVT, 1, 2, MySec[i..'']['SCod'])
   end
   file :close()
end
____________________________________
ЗАПИСЬ В ФАЙЛЕ (скопировано из файла):
ClassCod SecCod
 SPBFUT   SRH8
 SPBFUT   GZH8
____________________________________
Результат на картинке.
Что не так?

Р.S. Раньше эта же программа, но с бОльшим количеством переменных, работала нормально. Остальные переменные убраны для простоты.
 
Ага, вижу, что часть пробелов на форуме удаляются произвольно. Скопировать сюда файл тоже не получилось. В общем смотрите "Блокнот" на картинке, там пробелы - это пробелы, символы в русской раскладке отсутствуют.
 
Цитата
Андрей Пахомов написал:
MySec[i..'']['SCod'] = file :read(6)

Судя по скриншоту у Вас там явно не 6 символов, а больше. Может 7?

и InsertRow Вы используете не правильно.
надо так:
Код
        row = InsertRow(AVT, -1)
        SetCell(AVT, row, 1, MySec[i..'']['CCod'])
        SetCell(AVT, row, 2, MySec[i..'']['SCod'])
 
Ааа, блин, прошу прощения, мой косяк. Но исправив его я смог понять, что не так: не учтёны 2 символа перевода строки. Спасибо за помощь! :smile:
Сделал так:

       file :seek (cur,1)
       MySec[i..'']['SCod'] = file :read(6)
       file :seek (cur,2)
       
       InsertRow(AVT, -1)
       SetCell(AVT, i, 1, MySec[i..'']['CCod'])
       SetCell(AVT, i, 2, MySec[i..'']['SCod'])

И да, там после "SPBFUT" три пробела (всего 7 символов), но для этого и стоит строка "file :seek (cur,1)".

И ещё вопрос.
Ввиду того, что это для обработки очень большого количества данных, а работает очень медленно, приходится бороться за каждую мелочь.
Мне важно знать что будет работать быстрее:   file:seek (cur,2)    или   file:read()   ?
 
Цитата
Андрей Пахомов написал:
Мне важно знать что будет работать быстрее:   file:seek (cur,2)    или   file:read()   ?

У нас нет ответа на этот вопрос.
Проведите тестирование и сравните результаты.
 
Все всё знать не могут.
Хотя, по логике, у вас должна быть связь с программистами Quik-а (как раз на случай если вы чего-то не знаете), которые знают внутреннее строение команд.
Ну и на том спасибо, будем сами извращаться...)
 
Андрей Пахомов,

А при чем тут QUIK?
Вы говорите про штатные функции Lua
А Lua придумали не мы.
Вот ссылка на сайт по Lua с описанием функций seek и read
И как можете убедиться данный сайт не имеет к нашей компании никакого отношения.
Вот если бы вопрос был бы про функции которые описаны в QLUA.chm тогда да, это наши функции.
 
Понятно. Спасибо за разъяснение.)
Страницы: 1
Читают тему
Наверх