◆PROCESSING 逆引きリファレンス
カテゴリー:ファイル操作
ファイルから文字列データを読み込むには
【解説】
PROCESSINGで本格的にファイルを操作するにはJavaの命令を使います。ですが、文字列を単純に読み込むだけで良いなら loadStrings() 命令が便利です。
loadStrings() は saveStrings() とペアになる命令で、テキストファイルからシンプルに文字列を読み込みます。
【構文】
String[] line = loadStrings( String filename );
String[] line = loadStrings( String URL );
【パラメータ】
line : 読み込まれた文字列配列
fineName : 対象ファイル名
URL : URLアドレスの文字列
【注意】
パスを与えなかった場合、fileName は スケッチ格納フォルダ配下にあるものとして処理されます。
ローカルファイルのパスではなく Webページの URL を与えると、該当ページの HTML コードを読み取ることも可能です(試していませんが、HTMLだけではなくWeb上のテキストファイルを読み取ることもできそうです)。
loadStrings() が読み取り可能なのはUTF8形式のテキストファイルのみです。他の文字コードで書かれたテキストファイルや、バイナリファイル(画像データなど)は正しく読み取ることができません。
正確には、与えられたファイル名をなんでもかんでもUTF8形式のテキストファイルだと思って読み込んじゃいますので、でたらめな文字列が line に格納される事になります・・・。
line は String型の配列変数です。領域は loadStrings() が確保しますので、私たちは変数の宣言だけすればOKです。
指定されたファイルの読み込みに成功すると、ファイルの1行を配列の1要素として、全行数分格納して戻してきます。
読み込みに失敗した場合は(ファイルがない、Webページに接続できないなど)、コンソール領域にエラーメッセージを出力し、lineに null が戻されます。
ただし、その場合でも例外エラ-にはなりません。戻り値が null かどうかはプログラマー側でチェックする必要があります。
本命令を saveStrings() とペアで利用した場合には、1点だけ注意があります。
「ファイルに文字列データを書き込むには」の記事でも解説しましたが、saveStrings() は書き込み対象となる String 配列に null が格納されていると、空文字ではなく「 null 」という文字列を書き込むのです!。
なんて仕様だ・・・と思いますが、しょうがありません(汗)。
ですのでそんなファイルをloadStrings() で読み込むと、そのまま「 null 」という文字列が読み込まれてしまいます。「だれだ、ファイルに “null” なんて文字列を書き込んだやつは・・・」という事になりかねませんので注意して下さい。
【関連記事】
サンプルプログラム
テキストファイルを読み込む例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
final String FILE_NAME = "海洋生物.txt"; int textY; //テキスト表示縦位置 int fontSize; //文字サイズ PFont font; String lineData[] = null; void setup(){ size( 200,200 ); //表示フォントを設定 fontSize = 16; font = loadFont( "IPAGothic-48.vlw" ); textFont( font,fontSize ); textAlign( LEFT, TOP ); //テキストファイルを読む lineData = loadStrings( FILE_NAME ); if( lineData == null ){ //読み込み失敗 println( FILE_NAME + " 読み込み失敗" ); exit(); } } void draw(){ background(255); textY = 0; //読み込んだ各行を画面に表示 fill( 0 ); for( int i = 0; i < lineData.length; i++ ){ text( String.valueOf(i) + ":[" + lineData[i] + "]", 0, textY ); textY = textY + fontSize; } } |
スケッチ格納フォルダに 「海洋生物.txt」ファイルがある前提です。
loadStrings() でファイルの各行を lineData[] 配列に読み込み、画面に表示しています。下記画像は、該当テキストファイルをサクラエディタで開いた様子です。
2行目は改行のみの行、3行目は saveStrings() で null を書き込んだもの、4行目はタブ文字の行になっています。
下記出力サンプルで、改行のみの行、null、タブ文字がどのように表示されているかに注目してください。画面に表示する際には、文字の範囲がわかるように [ ] で囲っています。
URLを指定して読み込む例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
final String URL = "https://www.google.co.jp/"; int textY; //テキスト表示縦位置 int fontSize; //文字サイズ PFont font; String lineData[] = null; void setup(){ size( 200,200 ); //表示フォントを設定 fontSize = 16; font = loadFont( "IPAGothic-48.vlw" ); textFont( font,fontSize ); textAlign( LEFT, TOP ); //テキストファイルを読む lineData = loadStrings( URL ); if( lineData == null ){ //読み込み失敗 println( URL + " 読み込み失敗" ); exit(); } } void draw(){ background(255); textY = 0; //読み込んだ各行を画面に表示 fill( 0 ); for( int i = 0; i < lineData.length; i++ ){ text( String.valueOf(i) + ":" + lineData[i] , 0, textY ); textY = textY + fontSize; } } |
最初のサンプルを少しだけ変更したものです。
FILE_NAMEでローカルファイル名を指定するのではなく、URLという定数にGoogleのホームページアドレスを指定しています。
実行すると画面に HTMLの内容が表示されるのがわかると思います。
ただしWebページへの接続は、プログラムの実行環境によっては不安定になります(特にテキストとして人間に読ませる目的で書かれていないホームページアドレスなどでは顕著です)。
また接続にも時間がかかりますので、注意して下さい。
本ページで利用しているアイコン画像は、下記サイト様より拝借しております。各画像の著作権は、それぞれのサイト様および作者にあります。