質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

4426閲覧

csvファイルを多次元配列に格納する方法は?

ababab

総合スコア47

Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2016/10/09 15:11

編集2016/10/09 15:30

Swift3.0でcsvファイルの文字列を多次元配列に格納したいと思っています。
イメージはカンマ5個をひとまとまりとし、例えば

1,2,3,4,5,6,7,8,9,10,

というファイルであれば、
array[][]に対し

array[][] = [1,2,3,4,5][6,7,8,9,10]

というように格納し、

array[0][2]であれば3を、array[1][4]であれば10を取得できるようしたいです。
しかし今書いているコードだとinsertする時点でエラーが出てしまいます。

どのようにすれば良いでしょうか?
よろしくお願い致します。

swift

1override func viewDidLoad() { 2 super.viewDidLoad() 3 4 self.view.backgroundColor = UIColor.black 5 6 //csv読み込み 7 8 var str: [[String]] = [] 9 10 for var i in 0...5 { 11 12 for var j in 0...5 { 13 if let csvPath = Bundle.main.path(forResource: "file", ofType: "csv") { 14 do { 15 let csvString = try NSString(contentsOfFile: csvPath, encoding: String.Encoding.utf8.rawValue) as String 16 csvString.enumerateLines{ line, stop in 17 // 行の途中に","が含まれていたら、配列の要素として切り抜く 18 let str2: [String] = line.components(separatedBy: ",") 19 str[j].insert(str2, at:i) 20 21 } 22 // 何かしらのエラーがあると以下に入る 23 } catch _ { 24 print("何らかのエラーが発生しました") 25 } 26 print(str) 27 } 28 } 29 } 30

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/10/09 15:21

for var i in 0...5 { が2重になってますが・・・
ababab

2016/10/09 15:30

大変失礼致しました。コードを修正しました。
guest

回答1

0

ベストアンサー

文字列で取得する多次元配列でしたら以下の様になると思います。参考にしてみてください。

CSVに改行を入れている場合

swift

1import UIKit 2 3class ViewController: UIViewController { 4 5 var str: Array<Array<String>> = [] 6 7 override func viewDidLoad() { 8 super.viewDidLoad() 9 10 self.view.backgroundColor = UIColor.black 11 12 // CSV読み込み 13 if let csvPath = Bundle.main.path(forResource: "file", ofType: "csv") { 14 do { 15 var csvString = try NSString(contentsOfFile: csvPath, encoding: String.Encoding.utf8.rawValue) as String 16 csvString = csvString.replacingOccurrences(of: "\r", with: "") 17 let rowArray:Array = csvString.components(separatedBy: "\n") 18 19 rowArray.forEach { 20 let items = $0.components(separatedBy: ",") 21 str.append(items) 22 } 23 } catch { 24 // エラー 25 } 26 } 27 28 print(str) 29 print(str[0][2]) 30 //=> 3 31 32 print(str[1][4]) 33 //=> 10 34 } 35}

CSVファイルでしたら作成する時点で5こで行を変えておくのが、読み込む場合も使いやすくて良いと思います。

☆ file.csv

CSV

11,2,3,4,5 26,7,8,9,10

CSVに改行を入れていない場合

swift

1import UIKit 2 3class ViewController: UIViewController { 4 5 var str: Array<Array<String>> = [] 6 7 override func viewDidLoad() { 8 super.viewDidLoad() 9 10 self.view.backgroundColor = UIColor.black 11 12 // CSV読み込み 13 if let csvPath = Bundle.main.path(forResource: "file", ofType: "csv") { 14 do { 15 var csvString = try NSString(contentsOfFile: csvPath, encoding: String.Encoding.utf8.rawValue) as String 16 csvString = csvString.replacingOccurrences(of: "\r\n", with: "") 17 let array:Array = csvString.components(separatedBy: ",") 18 19 var items = [String]() 20 array.enumerated().forEach { (index, value) in 21 22 items.append(value) 23 24 if (index + 1) % 5 == 0 { 25 str.append(items) 26 items = [String]() 27 } 28 } 29 } catch { 30 // エラー 31 } 32 } 33 34 print(str) 35 print(str[0][2]) 36 //=> 3 37 38 print(str[1][4]) 39 //=> 10 40 } 41}

☆ file.csv

CSV

1 21,2,3,4,5,6,7,8,9,10

投稿2016/10/09 15:51

編集2016/10/09 16:14
_Kentarou

総合スコア8490

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問