![見出し画像](https://assets.st-note.com/production/uploads/images/98110922/rectangle_large_type_2_94cb5ea3f808e1dd0ee3256f1ccfe829.png?width=1200)
【Console Application】ファイルとデータベース 238【学習記】
ファイルとかデータベースの話🤤
Q.
簡単な方?
A.
ファイルオープン、エラーの有無、ファイルクローズ、という考えを行わなくて良くなるって話🤤
書き込み成功したか失敗したかの2種しか状態が存在しない😑
まぁ厳密には処理にとてつもなく時間がかかってほぼほぼフリーズの状態ってのも有るけどそれは恐らく異常事態なのでアプリ止めてファイルをバックアップから復活して再実行になると思う🙄
→ NSString の強力な機能で Java には有った try 消滅🤪
【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 # ヘルプ
----備忘録
(現在無し)
Csv
それじゃファイル書き出し部分からかな🤤
難航しそうで分離したけど果たして…🙄
Objective-C ファイル書き込み writeToFile 【初級編 第23回】
https://tech.pjin.jp/blog/2013/02/26/objective-c-ファイル書き込み-writetofile 【初級編 第23回】/
前回「何でも NSString かよ🙄」ってなった記事ね🤤
これ見て組むお🤔
………
1回で全部書き出す用…?🤔
Objective-cでファイル書き込み
https://buchi.hatenablog.com/entry/2014/09/08/155919
複数行で調べるとハンドルを作って書き出す従来の方式に近いやりかたが出てくるお🤔
ここで取れる方法は2つ🤔
1.1行ずつ NSArray に入ってる要素を1つの NSString に結合し NSString によって書き出す
2.NSFileHandle を用いて NSArray の中身を1行ずつ書き出す(Java はこちらに近い)
どう考えても1の方が簡単なんだけど…1発書きなので安全性もこちらの方が高い🤤
ただし
_人人人人人人人_
> メモリ喰い <
 ̄Y^Y^Y^Y^Y^ ̄
現在の設計だと全件全項目読みだした状態で保持していてそこから1行毎の文字列を生成するから前者の方法で処理するなら更に「全体」になる文字列のメモリが必要になる🙄
………
折角だからこの方法でやりたいって欲がふつふつと湧いてくるわけなんだけど…ダメ?🤪
![](https://assets.st-note.com/img/1676478374177-yWNF79W3is.jpg)
そんなの楽になる方選ぶに決まってるじゃない🤤
雑に計算すると全曲1000有るとして(正確には3桁くらい)4難易度(DP に BEGINNER 譜面は無い)として
1レコード256バイトくらい消費してても 256byte * 4難易度 = 1kByte; * 1000曲 ≒ 1MByte;
MSDOS 6.x で 640kB をやりくりしていた時代とは違うのよー🤪
ただし、稼働想定環境がモバイルの場合は Java 的に1行ずつでライブラリ書かないとダメ😞
まぁその時は load も1行ずつにしないといけないんだけど🙄
![](https://assets.st-note.com/img/1676478410078-qB2D1pMzZ5.jpg)
なんか単純化されすぎてて変な笑いが出る🤪
C/C++ 系は try で例外を取るよりもエラー用の変数を一緒に渡してそれ見て好きに制御しなさいなって方針なので try は基本少ないのよね🤔
なので本来はログだけ履いて throw しないで処理を全部無視するか exit() が正義かなとは思うけど Java からの移植なのでひとつこれで🤤
次回は
saveCsv だったんだからきっと loadCsv かな🤤