Блог им. E_psh

Алготрейдинг. Сохранение созданной таблицы в файл .csv через GetTableSize(t_id) и GetCell()

Когда необходимо сохранить созданную таблицу с идентификатором t_id в файл не зная сколько строк и столбцов в ней в итоге будет.
Поможет следующий вариант:

function main()
	local header = "Инструмент;Таймфрейм;Сигнал;Дата;Время;\n" 
	-- \n - перенос строки, иначе первую строку после заголовка допишет справа, а не с новой строки
	nFile = "c:\\temp.csv"
	t_id = nil -- вместо nil необходимо передать уже созданную таблицу с необходимымы результатами

	WriteToFile(nFile, t_id, header) -- использование ф-ции

end

function WriteToFile(nfile, t_id, header)
-- Ф-ция записи в файл данных таблицы с заголовком
-- nfile - файл для записи
-- t_id - идентификатор таблицы, которую нужно сохранить
-- header - заголовок в файле
-- файл будет дозаписываться.

-- используется ф-ция GetTableSize. В документации не указано:
-- для перебора массивом: i - номер строки (начинается с 1, заголовок не входит) до n
-- j - номер колонки, начинается с "0", до m - 1 (к примеру колонок 5, значит перебор с 0 до 4х)
---
 
    local CSV = io.open(nfile, "a+")
    local position = CSV:seek("end", 0)
	local txt = "" --для вывода в файл
    
    if position == 0 then -- обработка ошибки пустого файла
		CSV:write(header) -- пишем заголовок, если файл не был ранее создан
		CSV:flush() -- пишем изменения в файл
		position = CSV:seek("end", 0) -- устанавливаем в конец
	end

    local rows, col = GetTableSize(t_id) -- номер строки с 1 до x, номер колонки с 0 до n-1 (!!!)
    
    if rows ~= 0 then
        for i = 1, rows do -- номер строк с "1"
            for j = 0, col - 1 do -- номер колонок с "0" до m - 1
                txt = txt .. tostring(GetCell(t_id, i, j).image) .. ";" -- .image - это строковое значение, .value - это number
            end            
            txt = txt .. "\n"
            CSV:write(txt)
            txt = "" -- обнуляем строку, пишем следующий ряд в файл
        end
        CSV:flush()
        CSV:close()
    end 
end

в документации про GetCell() и GetTableSize() написано без примеров. Пример выше — устраняет данный недостаток.
github.com/EvPsh/QLUA

Данная публикация является личным мнением автора. Мнение владельца сайта может не совпадать с мнением автора.
4.7К | ★7
2 комментария
Благодарю через 2 года )), пол дня пытался перебор своей таблицы сделать
Приятно.спасибо:)
avatar

Читайте на SMART-LAB:
Фото
3 торговые идеи на этой неделе. Рост продолжается
Индекс МосБиржи за прошлую неделю прибавил 1,87% с учетом дополнительных сессий. Рост был широким, но обороты торгов ниже средних. Заметным...
Фото
Портфель Акции / Деньги (1,1% за 12 мес). Бежать, чтобы остаться на месте
Публичный портфель PRObonds Акции / Деньги почти отбил убыток с начала года, на 10 августа -0,6%. Индекс МБ за январь – август -17%....
Фото
Рынок WorkTech и HRTech в июне–июле: раунды, сделки, M&A
В июне и июле инвесторы финансировали платформы, которые помогают управлять сотрудниками, повышать вовлечённость и производительность команд.
Фото
Позитив: сильный 2й квартал. Где "безопасная" цена акции?
2 квартал выглядит сильно 8,3 млрд руб — рекордные квартальные отгрузки для всех кварталов кроме 4-го Выручка +39%г/г за 2 квартал и +41% за...

теги блога Евгений

....все тэги



UPDONW
Новый дизайн