ドコモの携帯からパソコンへ画像を送るとjpgファイルがBase64でエンコードされ、パソコン側では「mypic.vnt」というvNote形式のファイルになるのですが、元の画像に戻すにはBODY部をデコードすれば良いという事がわかりました。試しにBODY部のみを切り取ってデコードしたら、ちゃんと元のjpgファイルになりました。
そこで、BODY部の部分だけを取り出してデコードするプログラムを作りたいと考えています。(BODY部:「/9j/」から「END:VNOTE」の直前までの部分)
ファイルの中身の部分文字列を取り出す方法としてどのような方法が可能でしょうか?調べてみてsubstringというメソッドを使えば良いかなと思ったのですが、strに直接文字列が代入されているわけでもないし、引数の番号も何番目かなんてファイルによって異なるので使えないですよね…。。(見当違いの考え方だったらすみません…)キーワード検索みたいなものがあればいいのですが…。どなたかご存じの方がいらっしゃったらご教授お願いします。
↓はvNoteの中身です。
---------------------------
BEGIN:VNOTE
VERSION:1.1
X-DOCOMO-TYPE:JPEG
X-DOCOMO-SIZE:288X352
X-DOCOMO-FILESIZE:13095byte
X-DOCOMO-FILENAME:DSC00820.jpg
SUMMARY;ENCODING=QUOTED-PRINTABLE;CHARSET=SHIFT_JIS:
DATE:20041004T082700Z
X-DOCOMO-BODY;ENCODING=BASE64:/9j/4QyrRXhpZgAASUkqAAg・・・省略・・・・・・・・・・・・・・・・・
Mgo0AT7JFg/6Quagkh2dJEb6GgepD2pMUDExSYoASigQ0jmigBKKAP/Z
END:VNOTE
---------------------------
No.3ベストアンサー
- 回答日時:
#1です。
強調して、もう一度書きます。「行単位で」処理をする。
(「行単位で読み込む」と言っているのではない。「処理をする」。)
---
ファイルに100行、200行書かれていようと
1行1行取り出せば、
それは単なる、見慣れたString型文字列。
この1行文字列に、Base64データが入っていれば、
そこを取り出せばよいし、
入っていなければ、
何も処理をしなければよい。
以上の処理を、全行分、繰り返せば、
あ~ら不思議、
完璧なBase64データが得られている。
String stock="";//Base64データ蓄積用変数
while(true) {
・line = readLine();
・もしlineにBase64データが入っていれば、
・その部分(Base64データの部分)を切り出して
・切り出したものを蓄積用変数stock に蓄える(※文字列連結)
}
---
1行1行見ていけば、難しい話も簡単になる、ということです。
(※ただし上記の流れを実際にソースコードにするのは、
プログラミング初学者にはちょっと難しい部分が1箇所(?)あるかも)
---
で、これは前置き。
これからが本題。(?)
ちゃんとした入門書を使ってしっかり勉強しましょう。
「ファイルデータを解析したい」という要求は「高度な要求」なので、
だったらそのまえに「基礎事項」を身につけてから
質問すべし、ということ。
質問者さんがreadLine()、substring()、equals()、charAt()、indexOf()、
StringBuffer、文字列連結など(の使い道)でつまずいているようでは、
話のしようがないですよ、回答のつけようがないですよ、ってこと。
現に、#2さんが「答え(処理の流れ)」を書いているのに、
(「従って、行毎に…」の箇所)
質問者さんはそれにはまるで反応を示してませんよね。
つまりやっぱり入門書程度のことが身についていないので、
回答者の回答の言葉の「意味」がわからないのだと思います。
ってことで、「勉強してから質問」。
そうすれば道は開けるかと。
参考URL:http://www.geocities.co.jp/CollegeLife-Club/8577 …
お礼が大変遅くなってしまい申し訳ございません。
なんとかプログラムは出来ました。
こんな初心者に丁寧に教えて下さりありがとうございました。
これからはもっと勉強してから質問したいと思います。
本当にご迷惑おかけしました。
No.2
- 回答日時:
>ファイルの中身の部分文字列を取り出す方法としてどのような方法が可能でしょうか?
ファイルの中身を直接取り出すことはできません。
(大抵の言語はそうです)
一度、メモリ(変数)に格納してから作業します。
今回の場合は、画像データということでサイズがかなり大きくなることが
予想されます。
従って、行毎にデータの開始となる文字を探し、見つかったら終了となる文字を
見つけるまでファイルに書き出すようなことになると思います。
(小さければ、全部読み込んでもいいでしょう)
ご質問にある例を見る限り、開始データは、
BODY;ENCODING=BASE64:/9j/
でいいような気がします。
ただし、BEGIN:VNOTE から END:VNOTE の間にあることが必要でしょう。
また、このデータが添付ファイル中のことなのか不明ですが、
メールファイルそのものの中に記述されているのなら、
メールファイルのフォーマットを解析し実行する必要もあります。
ちなみち、文字列の中から、任意の文字列を探すことはできますよ。
String#indexOf()を見てください。
よけいなお世話かもしれませんが、もう少しいろいろと勉強してからでないと、
難しい気がしますけど。
お礼が遅くなり申し訳ありません。
配列にデータを入れる事は出来ました。
このデータは添付ファイル中のことではないので、データは上に書いたものだけになります。
任意の文字列を探す方法を教えていただきありがとうございます。
まだよくわからないのでこれから勉強しようと思います。
確かにもっと勉強しないと難しいですよね…。。。
ありがとうございました。
No.1
- 回答日時:
>ファイルの中身の部分文字列を取り出す方法としてどのような方法が可能でしょうか
データのフォーマットが「行単位」である以上、
それを処理するほうも、
行単位、つまり、よくある
BufferedReader br;
while(true) {
String l = br.readLine();
・
・
・
}
みたいな処理でいいのでは?
http://msugai.fc2web.com/java/IO/BufferedReader. …
自然だし簡単なやり方だと思う。部分文字列を取り出すのに、悩むこともないし。
参考URL:http://msugai.fc2web.com/java/IO/BufferedReader. …
お礼が遅くなり申し訳ありません。
行単位で読み込む事はわかりました。
部分文字列の取り出し方がまだよくわからないですが、がんばってみようと思います。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- PHP PHP MySql 画像を取得 1 2022/06/04 14:05
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- HTML・CSS HTMLタグのあるCSVファイルを利用する方法 4 2023/03/19 14:41
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
- PHP imageフォルダに、画像をリサイズして保存する時のファイル名を変更したい 1 2023/05/30 11:39
- Visual Basic(VBA) 【VBA】写真の縦横比を変えずに貼り付ける 5 2023/06/13 11:42
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAでCSVファイルを途中行まで...
-
openした後、closeしないでプロ...
-
VBAでCSVファイルの特定行を書...
-
エクセルVBA コードが同じでも...
-
ExcelをCSV書き出す場合のシー...
-
ファイルからある文字列の個数...
-
2つのCSVファイルをマッチング
-
C言語でのファイルのデータ更...
-
形態素解析の解析内容を各品詞...
-
プログラミング(流れ図とコー...
-
拡張子 ”log” と ” dat” の違い
-
CSVが可変長の場合の検索方法
-
perlで、後ろの行を読んで、前...
-
Perlの変数に文字数制限(容量...
-
awkスクリプトでダブルクォーテ...
-
バッチファイルの作り方(CSV→...
-
csvファイルの横方向への改行に...
-
drtファイルはどうしたら開...
-
無料配布の郵便番号自動入力cgi...
-
close()で例外が投げられる理由
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAでCSVファイルの特定行を書...
-
ExcelをCSV書き出す場合のシー...
-
openした後、closeしないでプロ...
-
VBAでCSVファイルを途中行まで...
-
VBAで巨大なファイルの途中から...
-
ReadLineでの読み出し行を指定する
-
JavaでCSVファイルを高速に読む...
-
MATLAB グローバル変数の宣言
-
エクセルVBA コードが同じでも...
-
Perlの変数に文字数制限(容量...
-
perlで、後ろの行を読んで、前...
-
2つのCSVファイルをマッチング
-
C言語でのファイルのデータ更...
-
VB6.0でDB接続する際に切断時の...
-
CSVが可変長の場合の検索方法
-
perlで容量の大きいCSVファイル...
-
1ファイルずつ読み込みたい
-
VBScriptでファイル保存先のデ...
-
C#でCSVファイルを逐一更新したい
-
perl で googleAPIを呼び出す...
おすすめ情報