0

假设我有 fieldA、fieldB 和 fieldC 的背景,我想将 CSV 文件加载到堆栈中。CSV 文件有 A、B 和 C 三列。“加载”按钮的脚本是什么样的?

4

3 回答 3

2

如果您只想逐字加载内容,那么

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
于 2013-04-18T21:09:48.273 回答
0

如果数据是干净的,CSV 文件通常具有由“;”分隔的字段 所以你可以用选项卡替换它们并使用“基本表字段”:

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

如果您的数据是 UTF8 或其他格式,您需要先对其进行翻译。

于 2013-04-19T04:30:01.810 回答
0

要将数据读入变量 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

其中 theLine 是一个整数。您可以使用 cr 代替 tab,并且可以以任何您想要格式化输出字段的方式调整此脚本。

于 2013-04-20T22:52:09.160 回答