Блог им. 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:
Аэрофлот наращивает перевозки, но расходы растут быстрее выручки
Результаты Аэрофлота за первое полугодие я бы назвал смешанными, но все же не провальными. Операционно компания продолжает расти, а второй квартал...
Фото
«Газпром» набирает силу: что стоит за апсайдом акций на 86%
Отчет «Газпрома» за второй квартал выглядит сильно. Прибыль и EBITDA оказались выше наших ожиданий, которые были наиболее оптимистичными...
Фото
📌 Гудвил в отчетности МГКЛ: что за ним стоит
Гудвил — одна из тех строк отчетности по МСФО, которая регулярно вызывает вопросы у инвесторов. Простыми словами, он отражает будущие...
Фото
ЛУКОЙЛ: без иностранных активов прибыль все еще есть. А кто думал иначе? Обзор отчета за 1-е полугодие 2026 по МСФО
ЛУКОЙЛ отчитался по МСФО — уже без иностранных активов (их отобрали из-за СДН санкций на компанию от нашего старого друга Трампа)...

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

....все тэги



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