プãƒã‚°ãƒ©ãƒ ・プãƒãƒ–レãƒ
第å…回 ストリーム・ファイル(C++)
I ã¯ã˜ã‚ã«
æ¶¼(以下S):プãƒã‚°ãƒ©ãƒ ・プãƒãƒ–レムもã„よã„よ第å…回ã«ãªã‚Šã¾ã—ãŸã€‚
åˆ(以下H):もã†è‡ªå·±ç´¹ä»‹ã¯ã„らãªã„ã ã‚ã†ã€‚åå‰ãŒèªã‚ãªã„ヤツã¯ä»¥å‰ã®å›žã‚’見ã¦ãれ。
S:本編ã®ç¶šãã«æˆ»ã‚‹ã®ã‚‚ä¹…ã—ã¶ã‚Šã§ã™ã。
H:ã‚ã‚ã€ç¬¬äº”回ã®å¾Œã«ãƒ†ã‚£ãƒ¼ã‚¿ã‚¤ãƒ ã®1~5ãŒç¶šã„ãŸã‹ã‚‰ãªã€‚
S:ã„ãã‚ãŸã‚Šã°ã£ãŸã‚Šã§æ›¸ã„ã¦ã‚‹ã‹ã‚‰ã€ãã‚“ãªã“ã¨ã«ãªã‚‹ã‚“ã§ã™ãŒã€‚
H:元々ãŒå‹¢ã„ã ã‘ã§å§‹ã¾ã£ãŸã‚³ãƒ¼ãƒŠãƒ¼ã ã‹ã‚‰ãªã€‚仕方無ã„。
S:ã•ã¦ã€ä»Šå›žã¯ã‚¹ãƒˆãƒªãƒ¼ãƒ ã¨ãƒ•ァイルã«ã¤ã„ã¦ã®è§£èª¬ã§ã™ã€‚
Hï¼šã‚¹ãƒˆãƒªãƒ¼ãƒ ã®æ–¹ã¯æœ€åˆã‹ã‚‰ä½¿ã£ã¦ãŸã‚“ã ãŒã€èª¬æ˜Žã›ãšã«èª¤é”化ã—ã¦ãŸã‚“ã よãªã€‚
S:今日ã¯ãã®ã¸ã‚“ã‚’ã¡ã‚ƒã‚“ã¨è§£èª¬ã™ã‚‹â€¦äºˆå®šã§ã™ã€‚
H:作者ã®ãƒ˜ã‚¿ãƒ¬ãªæ–‡ç« ã§ç†è§£ã—ã¦ã‚‚らãˆã‚‹ã¨ã„ã„ã‚“ã ãŒã€‚
S:賢明ãªèªè€…ã•ã‚“ã®ç†è§£åŠ›ã«æœŸå¾…ã—ã¾ã—ょã†ã€‚
II ストリーãƒ
H:ストリームã¨ã¯ã€Œå…¥å‡ºåŠ›ã‚’å˜ç´”化ã—ãŸç’状ã®ãƒ¢ãƒŽã€ã ã¨æ€ã£ã¦ãれ。
S:ãれを通ã—ã¦è‰²ã€…出ã—入れã§ãã‚‹ã‚ã‘ã§ã™ã€‚
H:ストリームã¨ã—ã¦æ“作をã¾ã¨ã‚ã¦ãŠãã“ã¨ã§ã€å…¥å‡ºåŠ›å…ˆãŒä½•ã§ã‚‚åŒã˜æ–¹æ³•ã§ã‚¢ã‚¯ã‚»ã‚¹ã§ãる。
S:よã使ã‚れる入出力先ã¯ã€ãƒ•ァイルã¨ã‹ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãªã‚“ã§ã™ã‚ˆã。
std::cout << "Some text." << std::endl;
H:実ã¯ä»Šã¾ã§ä½•æ°—ç„¡ã使ã£ã¦ãŸã‚³ãƒ¬ã€Œstd::coutã€ãŒã‚¹ãƒˆãƒªãƒ¼ãƒ ã 。
S:ã“ã£ã¡ã¯å‡ºåŠ›ç”¨ã«ä½¿ã‚れるã®ã§ã€Œå‡ºåŠ›ã‚¹ãƒˆãƒªãƒ¼ãƒ ã€ã¨è¨€ã„ã¾ã™ã€‚
H:入力ã«ä½¿ã£ãŸã€Œstd::cinã€ã¯ã€Œå…¥åŠ›ã‚¹ãƒˆãƒªãƒ¼ãƒ ã€ã 。
S:出力ストリームã¯ãƒ‡ãƒ¼ã‚¿ã‚’直列化ã—ã¾ã™ã€‚逆ã«å…¥åŠ›ã‚¹ãƒˆãƒªãƒ¼ãƒ ã¯ç›´åˆ—化ã•れãŸãƒ‡ãƒ¼ã‚¿ã‚’å…ƒã«æˆ»ã—ã¾ã™ã€‚
H:ã¶ã£ã¡ã‚ƒã‘ã¦è¨€ãˆã°ã€ãƒ‡ãƒ¼ã‚¿ã‚’一直線ã«ä¸¦ã¹ã‚‹ã®ãŒå‡ºåŠ›ã‚¹ãƒˆãƒªãƒ¼ãƒ ã§ã€ãã®é€†ãŒå…¥åŠ›ã‚¹ãƒˆãƒªãƒ¼ãƒ ã 。
S:以å‰ã«å‡ºãŸã‚µãƒ³ãƒ—ル(第二回)ã®ä¸ã«æ¬¡ã®ã‚ˆã†ãªã‚‚ã®ãŒã‚りã¾ã—ãŸã€‚
std::cout << "Input +1 = " << (i+1) << std::endl;
H:ã“れ㯠std::cout ã«æ–‡å—列「Input +1 = ã€ã€æ•°å€¤ i+1ã€ãƒžãƒ‹ãƒ”ュレータ std::endl ã®é †ã§æ¸¡ã—ã¦ã„る。
S:ã¤ã¾ã‚Šé †åºè‰¯ã一直線ã«ä¸¦ã¹ã¦ã‚‹ã‚ã‘ã§ã™ã€‚
H:ã§ã€çµæžœã¯æ–‡å—列ã«ã¾ã¨ã‚られるãžã€‚一直線ã˜ã‚ƒãªã„ã¨æ–‡å—列ã«å¤‰æ›ã§ããªã„ã‹ã‚‰ä¸¦ã¹ãŸã‚ã‘ã ãªã€‚
S:ãã—ã¦ã‚¹ãƒˆãƒªãƒ¼ãƒ ãŒçµã³ä»˜ã‘られãŸå…ˆ(ã“ã®å ´åˆã¯æ¨™æº–出力 = ç”»é¢)ã«å‡ºåŠ›ã•れã¾ã™ã€‚
H:動ã„ã¦ã‚‹çŠ¶æ…‹ã®ãƒ—ãƒã‚°ãƒ©ãƒ ã‹ã‚‰ãƒ‡ãƒ¼ã‚¿ã‚’出力ã™ã‚‹ã«ã¯ã€ã“ã‚“ãªæ‰‹é †ãŒå¿…è¦ãªã‚ã‘ã 。
S:文å—列ã«ã—ãªã„ã¨äººé–“ã«ã¯åˆ†ã‹ã‚Šã¾ã›ã‚“ã‹ã‚‰ãã‡ã€‚
H:文å—列以外ã®ãƒ‡ãƒ¼ã‚¿(ãƒã‚¤ãƒŠãƒªãƒ‡ãƒ¼ã‚¿)ã®å ´åˆã¯ã¾ãŸåˆ¥ã 。ãã£ã¡ã¯å¾Œæ—¥ã ãªã€‚
S:種類ã¨ã—ã¦ã¯ã€ç”»åƒã¨ã‹æ˜ åƒã¨ã‹éŸ³å£°ã¨ã‹ã®ãƒ‡ãƒ¼ã‚¿ãŒã‚りã¾ã™ã。
H:ã¡ãªã¿ã«ã€å‡ºåŠ›å€¤ã®æ•´å½¢ã‚‚ã§ãる。ãã®ãŸã‚ã«ã¯ãƒžãƒ‹ãƒ”ュレータを使ã†ãžã€‚
S:ãれã§ã¯ã‚µãƒ³ãƒ—ルコードを見ã¦ã¿ã¾ã—ょã†ã‹ã€‚
III ソースコード 1
01:
02:#include <iostream>
03:#include <iomanip>
04:int main(int argc,char* argv[])
05:{
06: using namespace std;
07: cout << "test" << endl;
08: cout << setw( 4 ) << setfill('0') << 12 << endl;
09: cout << setw( 0 ) << hex << showbase << 12 << endl;
10: cout << dec << setfill(' ') << 12 << endl;
11:
12: return 0;
13:}
H:出力ã—ã‹ã—ã¦ãªã„ã‹ã‚‰æ¯”較的シンプルã ãªã€‚
S:ã¡ãªã¿ã«å®Ÿè¡Œçµæžœã¯ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚
01:test
02:0012
03:0xc
04:12
IV 解説 1
H:01ã‹ã‚‰07行目ã¾ã§ã¯åˆ†ã‹ã‚‹ãªã€‚iomanip ã®ã‚¤ãƒ³ã‚¯ãƒ«ãƒ¼ãƒ‰ãŒã‚ã‚‹ãらã„ã 。
08: cout << setw( 4 ) << setfill('0') << 12 << endl;
S:08行目ã«ã¯ã€Œsetwã€ã¨ã€Œsetfillã€ãŒã‚りã¾ã™ã。ã“れらãŒãƒžãƒ‹ãƒ”ュレータã§ã™ã€‚
H:「setw(4)ã€ã§ã€æœ€å°å‡ºåŠ›å¹…ã‚’ 4æ–‡å—ã«è¨å®šã—ã¦ã„る。
S:次ã®ãƒ‡ãƒ¼ã‚¿ã®æ–‡å—数㌠4æ–‡å—æœªæº€ã ã£ãŸå ´åˆã«ã€æ–‡å—ã‚’è¿½åŠ ã—㦠4æ–‡å—ã«ã™ã‚‹ã‚ã‘ã§ã™ã€‚
H:埋ã‚ã‚‹ã®ã«ä½¿ã†æ–‡å—ã‚’è¨å®šã™ã‚‹ã®ãŒã€Œsetfill('0')ã€ã 。ã“ã“ã§ã¯ã€Œ0ã€ã‚’使ã†ã‚ˆã†ã«æŒ‡ç¤ºã—ã¦ã„る。
Sï¼šçµæžœã¨ã—㦠4æ–‡å—ã«ãªã£ãŸã€Œ0012ã€ãŒå‡ºåŠ›ã•れã¦ã„ã¾ã™ã€‚
09: cout << setw( 0 ) << hex << showbase << 12 << endl;
H:09行目ã®ã€Œhexã€ã¯ã€å‡ºåŠ›ã™ã‚‹æ•°å€¤ã‚’「16進数値ã€ã«ã—ã‚ã¨ã„ã†äº‹ã 。
S:ç§é”ãŒæ™®é€šã«ä½¿ã£ã¦ã‚‹ã®ã¯ã€Œ10進数値表ç¾ã€ã¨å‘¼ã³ã¾ã™ã€‚
H:何故ã‹ã¨è¨€ã†ã¨ã€10 ã”ã¨ã«ä½ãŒä¸€ã¤ä¸ŠãŒã‚‹ã‹ã‚‰ã 。0~9 ã¯ä¸€æ¡ã ã‚ã†ï¼Ÿ
S:åŒã˜ã‚ˆã†ã«ä¸€æ¡ã§ 0~15 を表ã™ã®ãŒ 16進数値ã§ã™ã€‚æ•°å—㯠0~9 ã—ã‹ç„¡ã„ã®ã§ã€æ®‹ã‚Šã¯ã‚¢ãƒ«ãƒ•ァベットを使ã„ã¾ã™ã€‚
H:ã¤ã¾ã‚Š 0~9 ã®æ¬¡ã¯ aã€ä»¥ä¸‹ bã€c … 最後㮠15 㯠f ã£ã¦ã‚ã‘ã 。
S:ãれ㧠16 ã«ãªã‚‹ã¨æ¡ãŒä¸ŠãŒã£ã¦ã€Œ10ã€ã«ãªã‚Šã¾ã™ã€‚10進 ã® 10 ã¨ç´›ã‚‰ã‚ã—ã„ã®ã§ã€16進ã®å ´åˆã¯å¤§æŠµé ã«ã€Œ0xã€ã‚’付ã‘ã¾ã™ã€‚
H:上ã®ä¾‹ã ã¨ã€Œ0x10ã€ãŒ 10進ã§ã® 16 ã«ã‚ãŸã‚‹ã‚ã‘ã 。
S:åŒã˜ã‚ˆã†ã«ã€ã‚³ãƒ³ãƒ”ュータæ¥ç•Œã§ã¯ 8進や 2進もよã使ã‚れã¾ã™ã€‚
H:ãã†ã„ã†æ™‚㯠8進ã¯ã€Œ0ã€ã€2進ã¯ã€Œ0bã€ã‚’é ã«ä»˜ã‘ã¦æ›¸ãã®ãŒä¸€èˆ¬çš„ã ãªã€‚
S:ã“れらã®ã€Œé ã«ä»˜ã‘ã‚‹æ–‡å—列ã€ã‚’「プレフィックスã€ã¨å‘¼ã³ã¾ã™ã。
H:ã§ã€ã“ã†ã„ã£ãŸãƒ—レフィックスを付ã‘るマニピュレータãŒã€Œshowbaseã€ãªã‚“ã 。
S:æ£ã—ãã¯ã€Œshow(表示ã™ã‚‹)ã€ã€Œbase(基数)ã€ãªã‚“ã§ã™ãŒã€æ„味ã¨ã—ã¦ã¯ä¸Šã®é€šã‚Šã§ã™ã€‚
H:「基数ã€ã£ã¦ã®ã¯ xx進ã®ã€Œxxã€ã®æ•°ã®ã“ã¨ã 。16進ãªã‚‰ã€ŒåŸºæ•°ã€ã¯ã€Œ16ã€ã«ãªã‚‹ãªã€‚
S:ã“ã‚“ãªæ„Ÿã˜ã§å‡ºåŠ›ã®03行目ã¯ã€Œ0xcã€ã¨ãªã£ã¦ã‚‹ã‚ã‘ã§ã™ã€‚12 㯠0xc ã«ãªã‚‹ã®ã¯å¤§ä¸ˆå¤«ã§ã™ã。
H:10 ㌠0xaã€11 ㌠0xb ã ã‹ã‚‰ãªã€‚ã¾ã‚ã€16進も使ã£ã¦ã‚‹ã†ã¡ã«æ…£ã‚Œã‚‹ã€‚
10: cout << dec << setfill(' ') << 12 << endl;
S:ãれã§10行目ã§ã™ãŒã€ã“ã“ã§ã‚‚マニピュレータãŒäºŒã¤ã‚りã¾ã™ã€‚
H:「decã€ã®æ–¹ãŒ hex ã®è¦ªé¡žã§ã€Œ10進表ç¾ã«ã™ã‚‹ã€ã ãªã€‚
S:ã¯ã„。他ã«ã¯ã€Œoctã€ã§ã€Œ8進表ç¾ã«ã™ã‚‹ã€ã‚‚使ãˆã¾ã™ã。
H:次ã®ã€Œsetfill(' ')ã€ã¯ã€åŸ‹ã‚ã‚‹ãŸã‚ã®æ–‡å—を「 ã€(åŠè§’スペース)ã«æˆ»ã—ã¦ã„る。
S:ãã—㦠12 を出力ã—ã¾ã™ã€‚10é€²ã«æˆ»ã—ãŸã®ã§ä»Šåº¦ã®å‡ºåŠ›(04行目)ã¯é€šå¸¸é€šã‚Šã€Œ12ã€ã§ã™ã。
H:他ã®ãƒžãƒ‹ãƒ”ュレータãªã©ã€ã‚¹ãƒˆãƒªãƒ¼ãƒ ã«ã¤ã„ã¦è©³ã—ã知りãŸã„å ´åˆã¯ä»–サイトを検索ã—ã¦ã¿ã¦ãれ。
S:英語ã§ã™ãŒã€ãƒªãƒ•ァレンス㌠C++ Reference ã«ã‚りã¾ã™ã€‚
V ソースコード 2
H:次ã¯ãƒ•ァイルã«ã¤ã„ã¦ã®èª¬æ˜Žã 。ã¾ãšã¯ã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰ã ãŒâ€¦
01:
02:#include <fstream>
03:int main(int argc,char* argv[])
04:{
05: std::ofstream fout("file.test.txt");
06: fout << "file stream test\nline " << 2;
07: fout.close();
08:
09: return 0;
10:}
S:ã¨ã£ã¦ã‚‚çŸã„ã§ã™ã。
H:ã¾ã‚ã€åˆ†ã‹ã‚Šã‚„ã™ãã¦ã„ã„ã‚“ã˜ã‚ƒãªã„ã‹ï¼Ÿ
VI 解説 2
S:今回ã€å•題ã«ãªã‚‹ã®ã¯05~07行目ã§ã™ã。
H:02行目ã®ã‚¤ãƒ³ã‚¯ãƒ«ãƒ¼ãƒ‰ãŒ fstream ãªã®ã‚‚注æ„ã ãŒãªã€‚
05: std::ofstream fout("file.test.txt");
S:ã¾ãš05行目ã§ã™ã€‚æ–°ã—ã「std::ofstreamã€ãŒå‡ºã¦ãã¦ã„ã¾ã™ã€‚
H:ãれã«ã€è¡¨è¨˜ã®å½¢å¼ãŒã€Œåž‹ 変数å = åˆæœŸå€¤ã€ã˜ã‚ƒãªã„ãªã€‚
S:ã¯ã„。ã“ã®å½¢å¼ã¯ã€Œã‚³ãƒ³ã‚¹ãƒˆãƒ©ã‚¯ã‚¿ã€ã¨å‘¼ã°ã‚Œã¾ã™ã€‚「型 変数å(パラメータ…)ã€ã«ãªã‚Šã¾ã™ã。
H:やã£ã¦ã‚‹ã“ã¨ãŒå¤‰æ•°ã®åˆæœŸåŒ–ãªã®ã¯ã€int ã¨ã‹ã®æ™‚ã¨åŒã˜ã 。
S:今回ã®ã¯ã€Œfoutã€ã¨ã„ã†å¤‰æ•°ã‚’作ã£ã¦ã€ã€Œ"file.test.txt"ã€ã¨ã„ã†ãƒ‘ラメータã§åˆæœŸåŒ–ã—ã¦ã„ã‚‹ã‚“ã§ã™ã。
H:std::ofstream ã®å ´åˆã¯ã€ãƒ‘ラメータã«ãƒ•ァイルåを渡ã™ã“ã¨ã«ãªã£ã¦ã‚‹ã€‚
S:ãれã§ã€file.test.txt ã¨ã„ã†åå‰ã®ãƒ•ァイルãŒé–‹ã‹ã‚Œã¦ fout ã«çµã³ä»˜ã‘られるã‚ã‘ã§ã™ã€‚
06: fout << "file stream test\nline " << 2;
H:もã†è¦‹æ…£ã‚ŒãŸè¡Œã ãªã€‚ストリームã¸ã®å‡ºåŠ›ã 。
S:準備ã—㟠fout ã«æ–‡å—åˆ—ã¨æ•°å€¤ã‚’出力ã—ã¦ã„ã¾ã™ã。
H:文å—列ã®é€”ä¸ã«ã‚る「\nã€ã¯ã€Œæ”¹è¡Œã€ã®æ„味ã®ç‰¹æ®Šãªè¡¨ç¾ã 。
S:以å‰ã¯æ”¹è¡Œã¯ std::endl マニピュレータã§è¡Œã£ã¦ã„ã¾ã—ãŸãŒã€ã“ã¡ã‚‰ã¯æ–‡å—列ã®ä¸ã ã‘ã§æ¸ˆã¿ã¾ã™ã。
H:ホントã¯ã¡ã‚‡ã£ã¨ã ã‘動作ãŒé•ã†ã‚“ã ãŒã€æ”¹è¡Œã™ã‚‹ã ã‘ãªã‚‰ã©ã¡ã‚‰ã®æ–¹æ³•を使ã£ã¦ã‚‚å•題無ã„ãžã€‚
S:他ã«ã‚‚特殊ãªè¡¨ç¾ã¨ã—ã¦ã€Œã‚¿ãƒ–ã€ã®ã€Œ\tã€ã‚„「"ã€æ–‡å—ã‚’æ–‡å—列内ã«å…¥ã‚Œã‚‹ã€Œ\"ã€ãªã©ã‚‚ã‚りã¾ã™ã€‚
H:è¦ã¯ç‰¹æ®Šãªæ–‡å—を入れる時ã«ã¯ã€ã€Œ\ã€æ–‡å—ã¨çµ„ã¿åˆã‚ã›ãŸè¡¨ç¾ã‚’使ã†ã‚ã‘ã 。
S:ã¡ãªã¿ã«ã€Œ\ã€æ–‡å—自体を入れãŸã„時ã¯ã€Œ\ã€ã¨æ›¸ã‹ãªã‘れã°ãªã‚Šã¾ã›ã‚“。注æ„ã§ã™ã。
H:ã“ã‚“ãªç‰¹æ®Šè¡¨ç¾ã®ã“ã¨ã‚’「エスケープ文å—列ã€ã¨å‘¼ã‚“ã§ã„ã‚‹ãžã€‚上ã®ã€Œ\ã€ã¯ãã®ãŸã‚ã«ä½¿ã†ã€Œã‚¨ã‚¹ã‚±ãƒ¼ãƒ—æ–‡å—ã€ã 。
07: fout.close();
S:最後ã®07行目ã§ã™ãŒã€ã“ã“ã§ã¯åˆ©ç”¨ã—ãŸãƒ•ァイルを閉ã˜ã¦ã„ã¾ã™ã€‚
H:もㆠfout ã«ã¯æ›¸ã‹ãªã„ã“ã¨ã‚’明示的ã«å‘½ä»¤ã—ã¦ã„ã‚‹ã‚ã‘ã ãªã€‚
S:実際ã«ã¯ fout 変数ãŒã‚¹ã‚³ãƒ¼ãƒ—ã‹ã‚‰å‡ºã‚‹æ™‚ã«è‡ªå‹•çš„ã«åŒã˜å‡¦ç†ãŒè¡Œã‚れるã®ã§ã€æ›¸ã‹ãªãã¦ã‚‚ã„ã„行ã§ã™ã€‚
H:準備ã—ãŸã‚‚ã®ã‚’片付ã‘ã‚‹ã¨ã„ã†æ„味ã§ã¯ã€æ›¸ãよã†ã«ã—ãŸæ–¹ãŒåˆ†ã‹ã‚Šã‚„ã™ã„。
S:コードをèªã‚€ä»–ã®äººã«ã‚‚ã€ã“ã‚Œã§æ›¸ãè¾¼ã¿å‡¦ç†ã¯çµ‚ã‚りã ã£ã¦åˆ†ã‹ã‚‹ã®ã§è¦ªåˆ‡ã§ã™ã。
VII 終ã‚りã«
H:以上ã§ã‚¹ãƒˆãƒªãƒ¼ãƒ ã¨ãƒ•ァイルã®èª¬æ˜Žã¯çµ‚ã‚りã 。
S:途ä¸ã«ä¸€éƒ¨åˆ¥ã®è©±(エスケープ文å—列)ã‚‚ã‚りã¾ã—ãŸã‘ã©ã。
H:説明ãŒè¶³ã‚Šã¦ãªã„ã¨æ„Ÿã˜ãŸæ™‚ã¯ã€ãれãŒã©ã“ãªã®ã‹ä½œè€…ã¾ã§ãƒ¡ãƒ¼ãƒ«ã§æ•™ãˆã¦ã‚‚らã†ã¨ç›´ã™ã‹ã‚‚ã—れãªã„ãžã€‚
S:ã‚ã¨ã¯ãƒªãƒ•ァレンスをå‚考ã«ã—ã¦ã‚‚らã†ã¨ã‹ã§ã™ã‹ã€‚
H:ã˜ã‚ƒã‚ã€ã¾ãŸæ¬¡å›žã«ãªã€‚
S:ã•よãªã‚‰ã§ã™ã€‚
第å…回 終了
ä¸€è¦§ã«æˆ»ã‚‹