![見出し画像](https://assets.st-note.com/production/uploads/images/105735559/rectangle_large_type_2_a3ac808d0d1ef4b1bbead5378b2d8411.png?width=800)
【Console Application】ファイルとデータベース 297【学習記】
今回の概略
なんちゃって列挙を採用した OC では想定通り変換できてなくて不具合が続出…😞
【Console Application】ファイルとデータベース【学習記】
仕様
https://note.com/sayka/n/nb8a67fa90a64?magazine_key=m7bb64c6a359f#br1mB
仕様
レコード
・レベル
1-12
・難易度
b,n,h,a,l
・曲名
・ランプ
-,x,a,e,c,h,e,f
オプションスイッチ
-u file.csv # 更新(略値)
ファイル名だけ指定した場合更新処理と見做す
-d file.csv # 削除
-p # csv 出力(略値)
何も指定せずに起動した場合出力処理と見做す
-v # バージョン
-h # ヘルプ
----備忘録
(現在無し)
前回の粗筋
なんちゃって NSArray サブクラスを作って漸く本処理前の EXC_BAD_ACCESS が無くなる
デバグ
前回「 -v とか知らん」の表示が出て終わったお😑
まず arg の数が Java 系と異なる事の確認から手を付けようかな🤤
Java より1つ多い仕様で書かないといけない筈なんだけどいきなり修正しないでちゃんと1つ余計に付いてる事を確認するお😑
以前のデバグではターミナルを起動して叩いてたので Xcode からのデバグ起動だとまた変わるかもしれないのでちゃんと見る必要があるぽ😞
( Windows はコマンド起動、ダブルクリック起動、ファイルドロップ起動で arg の構成が異なる)
あと、 argv[0] はフルパスで自分が入る筈なので「どこに DB を置けば良いのか」が分かる🤪
argv[0]
![](https://assets.st-note.com/img/1684272695583-RFlnY9ppGu.jpg)
![](https://assets.st-note.com/img/1684272695594-tTwkQtmT2E.jpg)
パス文字列長っ🙄
でもまぁ予想通りデバグビルドの中のを呼び出しているのが判ったお🤤
あと argv[0] にフルパスが来ていて Java より1つ多いのも IDE デバグでも変わらないので良かった😑
Java より1個多い想定のまま書き換えて大丈夫ねこれなら☺️
![](https://assets.st-note.com/img/1684272714400-ZOwQKGWd2i.jpg)
arguments を参照してる箇所を確認する必要があるけどまずはオプションをファイル名有り無しで変更してる部分かなこれは🤤
1つもなければ、という式なんだけどこれを「1つしかない」に変える🙄
`<=1` とするか `<2` とするかは好みが分かれると思う🤔
![](https://assets.st-note.com/img/1684272743838-yIcJFZVQM6.jpg)
0 なら false それ以外なら true という C の悪しき書き方🙄
まぁこれが `>0` の代わりなのでここは `>1` になれば辻褄が合うお🤤
![](https://assets.st-note.com/img/1684272759539-Z0rXYhUlNV.jpg)
ここのは `>0` になってる😑
0 で false 扱いを書いた時期で信用したりしてなかったりしてるっぽい🙄
このすぐ後で arguments[0] を参照してるので arguments[1] に直して次へ🤤
確か各分岐でそれぞれ同じ判定してるから毎回出てくるかな?🤔
基本文法の時はこの値を変数に放り込んで直値を書かないように書き換えた記憶があるけど今回のは「移植」なのでそのまま直値で直すぽ😑
![](https://assets.st-note.com/img/1684272778144-vGQnHIrKSp.jpg)
参照は有るけど判定は無かった🤢
オプション有り無しの判定の時に -p だけ特殊だから判定が入ってるのかな、多分🤔
switch(OptSw)
さて、 argv の個数問題は直したけど前回ちゃんと動作しなかったのは別の不具合なのよね🙄
それはオプション文字列比較が正しく動いてないという事😞
想定されるのは、オプション文字列格納時に Java と違う文字列にしてしまっているか、判定結果を得られない関数若しくは引数の書き方をしている…等😑
![](https://assets.st-note.com/img/1684272801985-P1XgONYJrE.jpg)
想定した通り、比較の文字列が同じになってない😞
はて? Java はどうやってこのハイフンの有る無しを解決したのやら?🤔
Java 原本
![](https://assets.st-note.com/img/1684272816038-VPlacb1poT.jpg)
_人人人人人人人_
> 原本は列挙 <
 ̄Y^Y^Y^Y^Y^ ̄
て事は OC の AnalyzeArgs はオプション文字列のまま格納しちゃってて😱になってるのかな🤔
![](https://assets.st-note.com/img/1684272832502-8LfUCJHGHW.jpg)
しかし原本でも AnalizeArgs の options への代入は引数がそのままで何も変換していない😑
という事は main 側への橋渡しをしてる方の AnalizeArgs かな🤔
![](https://assets.st-note.com/img/1684272856011-0K4cYEbdET.jpg)
![](https://assets.st-note.com/img/1684272855963-YhKjrPopwd.jpg)
橋渡し AnalyzeArgs は options へ足す際に OptSw.validOpt() で OptSw へ変換しているお😑ここの工程がおかしくなってるのだろうかね🤔
AnalyzeArgs (main)
![](https://assets.st-note.com/img/1684272897719-UI3evaSgM0.jpg)
![](https://assets.st-note.com/img/1684272897779-5qwbnutrvO.jpg)
これだと validOpt を通さないのでハイフン付きの文字列になっちゃうっぽ😞
![](https://assets.st-note.com/img/1684272934534-Bn1AqQWNeL.jpg)
こう?🤔
いや、これだと validOpt の返値は NSString なので不十分か😵💫
![](https://assets.st-note.com/img/1684272950505-Ib96VSZovb.jpg)
これで良い筈だけど…🙄
![](https://assets.st-note.com/img/1684272969114-F3SfpHvLaI.jpg)
なんで "-v" 与えて "p" になってるんじゃー🤬
ま、これはこれで多分進んだと思うのでいいや🙄
次回は
p になる謎を追うぽ🤤
この記事が気に入ったらサポートをしてみませんか?