Как загрузить файл CSV в стек LiveCode?

Предполагая, что у меня есть фон с fieldA, fieldB и fieldC, я хотел бы загрузить файл CSV в стек. В файле CSV есть три столбца A, B и C. Как выглядит скрипт кнопки «Загрузить»?


person z--    schedule 18.04.2013    source источник


Ответы (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
person mwieder    schedule 18.04.2013
comment
Где звонок create card? - person z--; 19.04.2013
comment
Я думаю, вы бы поместили это в цикл повторения, если вам нужно использовать базу данных на основе карт... если файл CSV создается в электронной таблице, он, вероятно, имеет кавычки вокруг некоторых или всех полей. Есть несколько библиотек для синтаксического анализа CSV... возможно, в онлайн-версии... - person Monte Goulding; 19.04.2013

Если данные чисты, файлы CSV обычно имеют поля, разделенные знаком «;». поэтому вы можете просто заменить их на вкладку и использовать «базовое поле таблицы»:

put url ("file:" & pathToFile) into tData
replace ";" with tab in tData
put tData into field "data"

Если ваши данные имеют кодировку UTF8 или что-то еще, вам необходимо сначала перевести их.

person hliljegren    schedule 19.04.2013
comment
очистить файлы CSV, конечно, должно быть очистить файл CSV - person hliljegren; 19.04.2013
comment
Работает с данными ANSI, но не с UFT-8. Я использую put uniencode(tData, "utf8") into tData. Как установить unicodeText поля таблицы? put tData into the unicodeText of field "data" выдает синтаксическую ошибку. Полевые данные представляют собой сетку. - person z--; 20.04.2013
comment
Вам нужно сделать set the unicodeText of field "data" to tData - person hliljegren; 22.04.2013
comment
CSV означает «значения, разделенные запятыми». Таким образом, разделителем полей является запятая, хотя при сохранении файла, например. в LibreOffice calc вы можете выбрать разделитель полей. - person z--; 12.06.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 вместо табуляции, и вы можете настроить этот скрипт так, как вы хотите отформатировать поле вывода.

person Mark    schedule 20.04.2013