Предполагая, что у меня есть фон с fieldA, fieldB и fieldC, я хотел бы загрузить файл CSV в стек. В файле CSV есть три столбца A, B и C. Как выглядит скрипт кнопки «Загрузить»?
Как загрузить файл CSV в стек LiveCode?
Ответы (3)
Если вы просто хотите загрузить содержимое дословно, то
on mouseUp
put url ("file:" & pathToFile) into tContents
end mouseUp
будет делать свое дело. Чтобы получить столбцы в поля, вам нужно проделать немного больше работы. В одну сторону:
on mouseUp
put url ("file:" & pathToFile) into tContents
-- set the itemDelimiter to tab -- if necessary
repeat for each line tLine in tContents
put item 1 of tLine & cr after field "fieldA"
put item 2 of tLine & cr after field "fieldB"
put item 3 of tLine & cr after field "fieldC"
end repeat
end mouseUp
create card
?
- person z--; 19.04.2013
Если данные чисты, файлы CSV обычно имеют поля, разделенные знаком «;». поэтому вы можете просто заменить их на вкладку и использовать «базовое поле таблицы»:
put url ("file:" & pathToFile) into tData
replace ";" with tab in tData
put tData into field "data"
Если ваши данные имеют кодировку UTF8 или что-то еще, вам необходимо сначала перевести их.
put uniencode(tData, "utf8") into tData
. Как установить unicodeText поля таблицы? put tData into the unicodeText of field "data"
выдает синтаксическую ошибку. Полевые данные представляют собой сетку.
- person z--; 20.04.2013
set the unicodeText of field "data" to tData
- person hliljegren; 22.04.2013
Чтобы считать данные в переменную lCsvData:
local lCsvData
on importCsv
answer file "Chooose CSV file..."
if it is not empty then
put it into myPath
put url ("binfile:" & myPath) into myData
Теперь мы можем расшифровать данные:
put urlDecode(urlEncode(myData,"UTF8")) into myData
Проблема: данные могут содержать возвраты. Позволяет удалить возвраты из элементов. При необходимости можно обрабатывать каждый элемент отдельно.
put empty into lCsvData
set the itemDel to semicolon
repeat for each line myLine in myData
repeat for each item myItem in myLine
put replaceText(myItem,cr,numToChar(14)) after lCsvData
end repeat
put cr after lCsvData
end repeat
end if
end importCsv
Теперь у вас есть чистые данные. Вы можете выбрать строку и поместить ее в поле следующим образом:
on showLine theLine
put line theLine of of lCsvData into myLine
set the itemDel to semicolon
repeat for each item myItem in myLine
put replaceText(myLine,numToChar(14),tab) into fld 1
end repeat
end showLine
где Line — целое число. Вы можете использовать cr вместо табуляции, и вы можете настроить этот скрипт так, как вы хотите отформатировать поле вывода.