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

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

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

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

Swift

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

Q&A

1回答

1523閲覧

CSVファイルの二行目以降の動作について

hel

総合スコア13

Xcode

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

Swift

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

0グッド

0クリップ

投稿2019/01/01 11:35

###やりたい事・実現したい事
クイズアプリを作ろうとしている初心者です。CSVファイルの読み込みに成功しました。ところが、二行目以降の結果が反映されません。やり方が分からず質問させていただきました。

###ソースコード
import UIKit

class SecondViewController: UIViewController {
let questionCount = 0
var correctCount = 0
var total = 5
var csvArray = String
var questionArray = String
var CorrectAnswer = String()
//問題を表示
@IBOutlet weak var questionLabel: UILabel!
//選択肢を表示
@IBOutlet weak var Button1: UIButton!
@IBOutlet weak var Button2: UIButton!
@IBOutlet weak var Button3: UIButton!
@IBOutlet weak var Button4: UIButton!

override func viewDidLoad() { super.viewDidLoad() csvArray = loadCSV(filename: "question") nextProblem() // Do any additional setup after loading the view. } @IBAction func nextButton(_ sender: UIButton) { nextProblem() } func nextProblem(){ questionArray.removeAll(keepingCapacity: true) if questionCount < total { questionArray = csvArray[questionCount].components(separatedBy:",") questionLabel.text = questionArray[0] Button1.setTitle(questionArray[1], for:.normal) Button2.setTitle(questionArray[2], for:.normal) Button3.setTitle(questionArray[3], for:.normal) Button4.setTitle(questionArray[4], for:.normal) CorrectAnswer = questionArray[5] }else {} } func loadCSV(filename : String)->[String] { // 返却値の初期化 var csvStr = [String]() // CSVを読み込んでArrayに // https://qiita.com/MYamate_jp/items/ce4a05e78aa23449fa1e if let csvPath = Bundle.main.path(forResource: filename, ofType: "csv") { do { var csvData = try String(contentsOfFile: csvPath, encoding: String.Encoding.utf8) csvData = csvData.replacingOccurrences(of: "\n", with: "") csvStr = csvData.components(separatedBy: .newlines) } catch let error as NSError { print(error.localizedDescription) } } return csvStr }

}
###CSVファイル
日本の西にあり、世界で一番人口が多い国,韓国,インド,アメリカ,中国,4
世界で2番目に人口が多い国,インドネシア,インド,アメリカ,オーストラリア,2
Appleの本社がある国,アメリカ,ロシア,日本,イタリア,1
ファーウェイがある国,中国,韓国,北朝鮮,タイ,1
パンが有名な国,日本,ドイツ,エジプト,フランス,4

###写真
イメージ説明

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

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

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

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

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

hameji001

2019/01/01 11:58 編集

func loadCSV(filename : String)->[String] { } 内のreturnの直前行に print(" ... csv:", csvStr)と書いて出力してみてください。 そのコンソールの結果をおしらせ下さい。
hel

2019/01/01 12:02

... csv: ["日本の西にあり、世界で一番人口が多い国,韓国,インド,アメリカ,中国,4世界で2番目に人口が多い国,インドネシア,インド,アメリカ,オーストラリア,2Appleの本社がある国,アメリカ,ロシア,日本,イタリア,1ファーウェイがある国,中国,韓国,北朝鮮,タイ,1パンが有名な国,日本,ドイツ,エジプト,フランス,4"] このように表示されました。
hameji001

2019/01/01 12:18 編集

やはり、一つの配列に全部を突っ込んでるから、 間違った構造になっているようですね。 エクセルで言えば、全部を1行に詰め込んでいると言うとこです。 複数行にするために[[String]]としないといけないです。 [[String]]と検索するだけでも、その構造の意味が出てくるかもしれませんよ。 ちなみにcsvファイルの読み込みできたとは この段階では言えないと思いますよ。
hel

2019/01/01 12:19

有難うございます。検索してやってみます。
guest

回答1

0

エラー内容がよくわからないので、なんとも言えませんが、
と書きましたが、コードをさらによく見ると、
csvStrを[String]にしているのがそもそもの間違いですね。
[[String]]にしなければいけないと思います。
この意味がわかりますか?

そして、csvStr.append(ここに保存したい内容)
とすれば良いのではないでしょうか?
「swift array」で検索してよく勉強してみてください。
取り出し方ももちろん変わりますからね。

きっと次はランダム表示の投稿を上げそうに見えますので書きますが、
arrayの取り出し方がわかれば、あとはランダムな数字を生成して、
取り出し、表示すれば良いだけです。
「swift random」で検索し、使えそうなfuncを勉強してみてください。

自分のアプリは自分で作ると言う気概を持ってください。
1から10まで聞いてる人はここでは嫌われますよ。
簡単な質問なのに、回答がつかない理由はそう言う所にあると思います。

もちろん、ヒントはあげますが、
全部コードを記入するのはhelさんのためにならないでしょうから。

サンプルコードをコピペするだけで満足せず、
使うものがきちんと動かない時はよく調べて
勉強することで、理解が深まりきちんと使えるようになりますよ。

投稿2019/01/01 12:09

hameji001

総合スコア639

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

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

hameji001

2019/01/01 12:35

printの出力が [["日本の西にあり"、"世界で一番人口が多い国","韓国","インド","アメリカ","中国","4"], ["世界で2番目に人口が多い国","インドネシア","インド","アメリカ","オーストラリア","2"], ["Appleの本社がある国","アメリカ","ロシア","日本","イタリア","1"], ["ファーウェイがある国","中国","韓国","北朝鮮","タイ","1"], ["パンが有名な国","日本","ドイツ","エジプト","フランス","4"]] となるように工夫を頑張ってください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問