先日, データをCSVに保存するショートカットを紹介しました.
今度は保存したCSVを読み込んでデータを取り出してみましょう.
※価格は記事執筆時のものです. 現在の価格はApp Storeから確認ください.
レビュー時のバージョン : v2.0
スポンサーリンク
保存されたCSVデータを読み込む
ファイルを読み込むには「ファイルを取得」のアクションを利用します.
説明にはiCloudしか記述がありませんが保存の際と同様, Dropboxにも対応しています.
シンプルに読み込むだけなら例えば今回のように
- ファイルを取得
- 結果を表示
で終わりです.
読み込み時にファイルを選択したい場合は「書類ピッカーを表示」をオンに, 予め指定したいならこれをオフにして「初期パス」に保存先のパスを入力します.
(そういう意味では上の画像で「書類ピッカーを表示」をオンにしてるのは無駄ということですね...)
参考までにこの時点でのファイルの中身を画像右に貼っておきます.
実行すると画像のようになります.
iOSでも区切りはカンマなんですね.
分割する
上のままだとデータがひとかたまりになっていて扱いづらいです.
そこで「テキストを分割」のアクションでデータ一つ一つを分割し, 配列とします.
幸いCSVの区切りであるカンマがあるのでこれを分割に利用します.
「テキストを分割」で区切りを「カスタム」にし, 値にカンマ "," を入れます.
これを「ファイルを取得」直後に置いて再び実行すれば, 画像右の通りデータ一つ一つが区切られた結果として表示されました.
後は欲しいデータを順次引っ張り出すだけです.
実際に作ってみました.
まず「入力を要求」で欲しい行数を与えます.
先のやり方はすべてのデータを配列として並べているため, 今回のような3種のデータ がある場合, 「テキストを分割」による結果は
…と並んでいることになります(ショートカットアプリではインデックスは1から始まるようです).
なのでデータの種類の数に応じて取り出す頭は連続とは限りません.
今回は3種なので取り出す頭の番号は初項1, 公差3の等比数列なので, 行目の先頭は
となります.
この計算を「入力を要求」の後に行っています.
これで取り出す行区間を計算した後, 「ファイルを取得」と「テキストを分割」でひとまずデータを配列化します.
最後に「リストから項目を取得」で, 配列化したテキスト列から必要な行区間のデータを取り出せばOKです.
これで指定の行にある列データが取れる…と思いきや, 結果がおかしいですね.
データシートと比較すると, 一つ分ズレています.
なぜこんなことになるかというと, 「テキストを分割」の結果は今回あくまでもカンマに対してであり, CSVはデータ間を分けるのに区切りだけでなく改行も用いられます.
今回の「テキストを分割」ではカンマでしか分割していないため, 改行が絡む箇所はその全体が一つのデータとなるため「結果を表示」での見た目は分割されていても, 実際は画像のように本来2つのデータが一つとなっているのです.
従って分割の対象はカンマだけでなく, 改行に対しても行う必要があります.
修正
というわけで, 先程のショートカットにある「テキストを分割」でカンマを対象にしたアクションに加え, 改行を対象に分割する「テキストを分割」を追加します.
実行すると, 正しい結果を得ることができました.
〆
よくあるプログラム言語ではこんなややこしさは生まれませんが, 本アプリにおける「ファイルを取得」および「テキストを分割」の仕様が影響した結果と言えるでしょう.
データの取り出しにしても, 例えばC++であればデータを1列に読み込んで使うなどせずに
sData->CommaText = stl->Strings[i];
sData->Strings[j];
などを使って欲しい行と列をピンポイントで指定できるのですが, 大方見た感じではこのショートカットアプリでこれに相当するアクションはなさそうです.
いずれにしろ, 先日の記事と合わせデータファイルの読み書きができることが分かりました.
これまではMicrosoftやGoogleなどのサードパーティ製アプリが必要であった操作がショートカットに取って代わり, しかも作業もより簡単になりますね.
どちらにもメリット・デメリットがあります.
目的が曖昧であったり汎用性をもたせたい場合はそちらを, 特化した使い方であればショートカットを使って…と, それぞれに価値を見出すことができます.
URLスキームについてはこちら
[Search]iPhone URLスキーム -The theoryの戯言iPhoneのURLスキームを検索して一覧表示できます. リクエストは内容に応じてお答えします.