3

古いシステムからいくつかの危険な mySQL CSV エクスポートがあり、それを解析して新しい Ruby on Rails アプリケーションにロードしています。

以下に例を示します。

"1","1","When a ticket is marked as Resolved, revert the assigned_to to the one who started it",,"7","1","1.00","0.00","2",NULL,NULL,"1","2009-06-04 16:40:37","2009-06-04 16:40:37",NULL,"0000-00-00 00:00:00";"2","2","Email notifications when ticket is assigned to someone",,"1","1","1.00","0.00","1",NULL,NULL,"1","2009-06-04 16:41:21","2009-06-04 16:41:21",NULL,"0000-00-00 00:00:00";"3","1","When a ticket is marked as Resolved, revert the assigned_to to the one who started it - and notify",,"7","1","1.00","0.00","2",NULL,NULL,"1","2009-06-09 18:10:47","2009-06-09 18:10:47",NULL,"0000-00-00 00:00:00";"4","3","Change Password Capability","Fix the forgot password capability (and for bonus points, add capability for user to change once logged in.","7","1","0.00","0.00","1",NULL,NULL,"9","2009-06-09 18:13:45","2009-06-09 18:13:45",NULL,"0000-00-00 00:00:00";"5","4","Manager View","Don't need listed:
  Milestone
  Status

Do need listed:
  Assigned To
  Position (since we're not assigning case numbers)","7","1","0.00","0.00","1",NULL,NULL,NULL,"2009-06-09 18:16:32","2009-06-09 18:16:32",NULL,"0000-00-00 00:00:00";"6","5","TICKETS: Remove Position / Assign ID","Don't really need to assign a position, instead would be better to automatically assign a ticket number and be able to sort on that.

Also, when you don't assign a position to a ticket, it breaks the system (or at least it doesn't show up and causes an error in the Manager View)","7","1","0.00","0.00","1",NULL,NULL,"9","2009-06-09 18:19:10","2009-06-09 18:19:10",NULL,"0000-00-00 00:00:00";"7","6","Manager View","Don't need listed:
- Milestone
- Status

Do need listed:
- Case ID (preferred)
- Position (until case id implemented)","7","1","0.00","0.00","1",NULL,NULL,"9","2009-06-09 18:24:07","2009-06-09 18:24:07",NULL,"0000-00-00 00:00:00";"8","5","TICKETS: Remove Position / Assign ID","Don't really need to assign a position, instead would be better to automatically assign a ticket number and be able to sort on that.

Also, when you don't assign a position to a ticket, it breaks the system (or at least it doesn't show up and causes an error in the Manager View)","7","1","0.00","0.00","1",NULL,NULL,NULL,"2009-06-09 18:35:00","2009-06-09 18:35:00",NULL,"0000-00-00 00:00:00";"9","7","Ability to \"assign\" projects to users","Some way, even manual in the database, to indicate which projects a user may access","7","1","0.00","0.00","1",NULL,NULL,"9","2009-06-09 18:45:16","2009-06-09 18:45:16",NULL,"0000-00-00 00:00:00";

フィールドは二重引用符で囲み、カンマで終了し、行はセミコロンで終了します。うまくいけばわかるように、特定のフィールドでは、フィールド内にハード リターン (?) があります。これが、改行文字としてではなく、CSV ファイルに表示される方法です。

CSVを解析するための私のルビーテストコード:

  csv_file_path1 = 'data/file.csv'

  CSV.foreach( csv_file_path2, { :row_sep => ";" } ) do |row|
    puts row[1]
  end

これを rake タスクで実行すると、次の出力が得られます。

 1
 2   
 3
 4
 5
 6
 7
 8   
 rake aborted!
 Missing or stray quote in line 9
 ...

フィールドにハードリターンがある行を解析できないのはなぜですか? ありがとう。

編集: CSV の詳細を表示するように更新されました。

4

1 に答える 1