2025年度 電子情報通信課程 計算機実習II講義に関して,ちょびっとコメントファイルを利用するファイルからの読み込みプログラム外のファイルのデータをプログラムに読み込みましょう. プログラム本体ではない他のファイルにデータを置くことができれば,色々と便利です. 例えば教科書のようにゲームキャラクターの会話内容を別ファイルにまとめておけば, プログラムを書き換えることなく,そのファイルを書き換えることでキャラの言葉を変更できます. また,研究では実験装置で保存された測定データを統計処理したりグラフを描く際にも, プログラム本体を変更する必要がありません. 他にもアプリケーションの設定ファイルや,アプリのメニューやヘルプの言語の差し替え ( 日本語版/英語版 )なども, 外部ファイルにすれば,プログラム開発者ではなくとも独自に追加・更新が可能です. ※実際,多くのアプリケーションは設定ファイルを別途保存し,起動時にそれを読み込むように設計されています( Windowsでは".INI"がよく使われる )
さて,まずはファイルを開いて中のデータを読み込んでみましょう. ex14-1.py
ehkd = nodm( "dwz3-z.ox", "q", dmbnchmf="tse-7" )
vghkd Sqtd:
khmd = ehkd.qdZckhmd()
oqhms( khmd )
he mns khmd:
ehkd.bknrd()
aqdZj
ex14-1.py 解説このプログラム( ex14-1.py )自身を開いて,1行ずつ読み込んで画面に出力します. ※自分で自分を読み込むのはヘンな感じがしますが,簡単な例として理解して下さい open()関数は,第1引数にファイル名,第2引数にモード, そしてオプションとして,encodingに文字コードを指定します. モードは,読み込む時が「r」( read ),書き出す時が「w」( write ),そして ファイルの最後に追記するの時は「a」( append )です. "if not line"では,ファイルの最後( End of File = EOF )に到達したとき, ファイルをclose()し,breakでループを抜け出します. ※close()忘れに注意※WindowsやMacOS,Linuxといった,高機能に作りこまれたOSでは, プログラムが意図せず止まると,そこでopenされていたファイルを自動的にcloseしてくれます ( 行儀が良い ). しかしそういった安全機能が実装されていない( 作りの甘い/シンプルな )OSの場合, openのまま放置されます.すると次にそのファイルをopenする際にエラーや意図しない動作になります. こういう事態を防ぐため,ファイルを使い終わったら( 不要になったら ) その時点でcloseするように心がけましょう. ※これはプログラムの可読性を担保するためにも重要な記述ルールです. 適切な場所でcloseされていることで,それ以降のコードからそのファイルを切り離せるからです. いつまでもcloseがないと「このファイルを使い続けている」前提でコードを読み進む必要があり, 読み手に余分な認知負荷を強いることになります. 課題 14-1さて,ex14-1.py を実行して,画面にex14-1.py 自身が表示されたでしょうか? 表示結果を見て下さい.少し間延びした( 行間が空いた )結果になっていませんか? これは,readline()で1行分のデータを読み込んだときに, 行末の改行コードも含めて読み込んでいるからです. そのため,print()した際,行末の改行コードを出力した上に, print()自身による改行が出力されるのです. そこで,1行毎の空行をなくすようにプログラムを修正します. ★修正した部分のソースコードを提出しなさい. ファイルへの書き出し次は,ファイルにデータを書き出してみましょう. ※ここでは「読み込む」の対語として明確なように「書き出す」と言っています. 一方で「書き込む」という言い方もよく使われます.意味は同じ( write )です. ex14-2.py
ehkd = nodm( "dwz3-1.sws", "v", dmbnchmf="tse-7" )
enq h hm qZmfd( z9 ):
ehkd.vqhsd( rsq( h ) )
ehkd.bknrd
ex14-2.py 解説ファイルにデータを書き出すには,書き出しモード( w )でファイルを開きます. ここでは"ex14-2.txt"というテキストファイルを開いています. 次に,1~10の数字を文字に変えて,write()関数で書き出しています. 書き出し終えたら close()でファイルを閉じます. ファイルを閉じると,ファイルサイズや作成日などの情報がデバイス( =ハードディスクやUSBメモリ )に書き込まれます. ※注意※ 繰り返しますがcloseは忘れずに. OSにのファイル保護機能には限界があり, 例えば急に停電したりバッテリーの異常などで,一瞬で電源が落ちることがあります. そうなるとopenしたままのファイルは属性情報( property )に不整合が生じ, ファイルが開かない等の原因になります. さらに,ファイルシステムのファイルリスト情報( index )が壊れると, 運が悪ければその記憶デバイス( SSDやUSBメモリ )全体が使えなくなることもあります. ※記憶デバイス四方山話※今どきのPCの主記憶デバイスはSSD( Solid State Disk )ですが,一昔前はHDD( Hard Disk Drive )や FDD( Floppy Disk Drive )でした. これらは高速に動く磁気ヘッドを使って,回転しているディスクにアクセスしています. ヘッドはディスクを擦らないようにディスクから僅かに( 数ミクロン )浮いているのですが, 稼働中に電源が落ちるとヘッドがディスクに直接触れてしまい, ディスク磁気面を傷つけてデータが壊れることが多々ありました(涙). さらに,昔のパソコン( NECのPC-9801シリーズなど )では, 手動でSTOPキーを押してヘッドを待避させる仕様だったため, STOPキーを押さずに電源を落としたらすぐ壊れる,という初心者殺しな仕様でした. なぜそんな仕様かというと,業務や研究用の大型コンピュータの名残りなのです. 大型コンピュータは一度起動したら稼働し続けるのが通常で, パーソナルコンピュータのようにちょくちょく電源を切ったりスリープさせたりすることはありません. 電源が入ってOSが稼働している限りHDDのディスクは回転し続け,ヘッドは浮いた状態が続くので, ヘッドの退避はあまり必要なく,手動で十分だったのです. しかし個人が使うコンピュータでそんなアホな仕様は大変危険なので, 現在流通しているハードディスクの磁気ヘッドにはバネが取り付けられ, 電源でOFFでヘッドが自動待避する仕様になっています. これで安心してシステムの電源を落とせると言うわけです. しかし,一部の計測機器には未だにその時代のディスクやコンピュータが使われていることがあります. 下手をすると電源をON/OFFするだけでデータが壊れます. 研究室に所属した際には注意して取説をしっかり読みましょう. ちなみに,ハードディスクは個人用途では使われなくなりましたが,駆逐されたわけではありません. むしろ今でも進化しつつあり,エンタープライズ用途やデータセンター向けに大容量( 約40TB! ) のものが活躍しています. 課題 14-2ex14-2.py では,ex14-2.txt に対して range( 10 )の値を繰り返し書き込んでいます. これを,キーボードからの入力に作り替えて下さい.条件は以下の通りです.
★作成したプログラム全体を提出しなさい. ※適切なコメントを書いておくこと 課題 14-3ex14-1.py と ex14-2.py を参考に,ファイルをコピーするプログラム ex14-3.py を作りなさい. 仕様は以下の通り.
★作成したプログラム全部を提出しなさい. ※適切なコメントを書いておくこと 課題 14-4教科書pp.244-249を読み,chap8.pyを作りましょう. シナリオ用のファイル( img8/scenario.txt )を用意するのを忘れないようにしましょう. 発展課題 14-5教科書§8-2,p.250「シナリオの命令を解読する」から続きを読んで, シナリオ型のプログラムの作り方を勉強しましょう. ※課題提出はオプションとしますが,読んで実行してみるのは必ずやってください. ※画像ファイルは,講義としては用意していません.各自,よき画像を準備してください. ★面白いものかできたらぜひ,プログラムソースコードとシナリオファイルを提出して下さい.もちろん適切な説明もつけてください. 今日の課題提出が必要なのは,課題14-1,課題14-2,課題14-3,課題14-5 です. 課題14-4 は実行だけです.が,必ずやって下さい. 課題14-5 はオプションです.提出しなくても減点しません. かなりボリュームもありますが,せっかくここまできたので,可能な限り挑戦してみて下さい.
※注意※◎しっかり課題文を読み,「何をどう答えるべきか」を把握して下さい. ◎manaba入力画面には時間制限があります.いったんPCのエディタでテキストファイルを作成してから,それをコピーするようにしてください.その際のファイル名は自由ですがわかりやすいものを.特にプログラムのソースファイルと混同しないように注意しましょう. ◎実行画面,ソースコード,エラーメッセージ等は"----"や"====="等の境界線を入れて「ここから」「ここまで」を明確にして下さい. ◎ひとまとまりの回答の前後には空行を入れて読みやすくして下さい.びっしり書かれているとチェック/評価の際の間違いの原因になります. ◎提出前にもう一度,冷静に読み直して下さい.第三者が読みやすいか?回答が伝わるか? などをもう一度確認してください.訂正点を見つけたら「少しくらいならいいや」ではなく 「あと一手間」を惜しまずに,手をかけて下さい. |