尝试将CSV数据导入Active Record时出现问题。我的CSV是在Google工作表中创建的,然后以CSV格式下载。 CSV中的某些条目在某些单词周围有引号(即“逻辑”)。以下是我要编写的用于导入此数据的脚本:
<?xml version="1.0" encoding="utf-8"?>
我在rails控制台中执行脚本:
<uses-permission android:name="android.permission.MANAGE_DOCUMENTS"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="ANDROID.PERMISSION.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="ANDROID.PERMISSION.CHANGE_WIFI_STATE"/>
<uses-permission android:name="ANDROID.PERMISSION.CHANGE_WIFI_MULTICAST_STATE"/>
<uses-permission android:name="ANDROID.PERMISSION.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="ANDROID.PERMISSION.CHANGE_NETWORK_STATE"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".SDCardImagesActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
大多数数据加载得很好,并且按照我想要的方式正确保存到数据库中。
以下是我尝试使用标头导入的数据示例:
require 'csv'
homeDir = Dir.home
file = File.join(homeDir, "trdata-1.csv")
header = []
CSV.foreach(file, headers: true, :quote_char => '"', encoding: "UTF-8") do |row|
#possible cause
possible_cause = PossibleCause.find_by_description(row["Possible Cause"]) || PossibleCause.new.tap do |possible_cause|
# find the possible cause by its description, else make a new one.
possible_cause.description = row.to_s.slice(row["Possible Cause"])
#
puts possible_cause.description
end
#troubleshooting paths
troubleshooting_path = TroubleshootingPath.find_by_description(row["Troubelshooting Path"]) || TroubleshootingPath.new.tap do |troubleshooting_path|
# Find the troubleshooting path by its description, or else make a new one.
troubleshooting_path.description = row.to_s.slice(row["Troubleshooting Path"])
puts possible_cause.description
end
possible_cause.troubleshooting_paths << troubleshooting_path
#action steps
action_step = ActionStep.find_by_description(row["Action Step"]) || ActionStep.new.tap do |action_step|
action_step.description = row.to_s.slice(row["Action Step"])
puts possible_cause.description
end
troubleshooting_path.action_steps << action_step
possible_cause.save!
end
此行将炸毁脚本。 “逻辑”一词用引号括起来。我已经尝试取出引号,它会运行得很好,所以它肯定是引起问题的引号。我不知道为什么会发生这种情况并且谷歌搜索没有取得很多结果。
答案 0 :(得分:2)
我相信当您阅读相应的列时,您的问题并没有转义引号,在这种情况下,&#34;行动步骤&#34;。
最简单的选择是将CSV中的双引号更改为单引号,然后运行脚本。
答案 1 :(得分:0)
您可以从说明中gsub
引用"
:
possible_cause.description.gsub('"', '')