プログラミング演習Ⅲ(2023)

【課題3-06】ファイルの入力

プロジェクトタイプC#コンソールアプリ※
プロジェクト名Prac_3_06
ソリューション名PET3
ターゲットフレームワーク.NET 6.0 (長期的なサポート)
最上位レベルのステートメントを使用しない使用しない(チェックオン)

※ 「コンソールアプリ(.NET Framework)」ではないので注意せよ!

一行に一つずつ実数が書かれているファイルを読み込み, その数値と,その数値に0.5を乗じた値を表示するプログラムを作成せよ.

ただし,この入力ファイルにはときどき数値として解釈できない文字列が書かれた行が含まれている. そのような行の場合は計算を行わずにそのまま表示すること

注意
  • この設問では,必ず後述するテキストファイルを読み込むようにプログラムを書くこと.

入力ファイルは以下をダウンロードして使用すること.これは_のような内容のファイルである. _に示す通り,この入力ファイルにはときどき数値として解釈できない文字列が書かれた行が含まれている. そのような行の場合は計算を行わずにそのまま表示すること. 同様の形式のどのような入力ファイルに対しても正しく動作するようにプログラムすること

double_list_x.txt

入力ファイルの内容(途中まで)

また,入力ファイルは上述のファイル名で作業ディレクトリの直下から読み込むこと(入力ファイル名を変更してはならない). 設定方法が分からない場合は準備作業 - 作業ディレクトリの変更を参考にすること.

各行の内容は,実行結果のように_に示す形式で表示すること.

行の内容が数値として解釈できる場合
行数: その行に記載された数値 * 0.5 → 計算結果
  • 凡例
    • 行数
      • 読み込んだ行が何行目か(1開始).最初の行は「1行目」である.
      • 文言.半角コロン + 半角スペース
    • その行に記載された数値
      • 読み込んだ行に記載された数値をそのまま表示する.
    •  * 0.5 → 
      • 文言.半角スペース + 半角アスタリスク + 半角スペース + 半角数字ゼロ + 半角ピリオド + 半角数字5 + 半角スペース + "→" + 半角スペース
    • 計算結果
      • その行に記載された数値に0.5を乗じた数値.
    • 改行
行の内容が数値として解釈できない場合
行数: 行の内容
  • 凡例
    • 行数
      • 読み込んだ行が何行目か(1開始).最初の行は「1行目」である.
      • 文言.半角コロン + 半角スペース
    • 行の内容
      • 読み込んだ行の内容そのもの
    • 改行
出力フォーマット

プログラムの概形は_のようにすること(必ず以下をコピーしProgram.cs全体を上書きすること).

テンプレートコード
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
namespace Prac_3_06
{
    class Program
    {
        static void Main(string[] args)
        {
            /*************************************/
            /*                                   */
            /*              空欄                 */
            /*                                   */
            /*************************************/
        }// end of Main()
    }// end of class Program
}// end of namespace

正しく実装できた場合,実行結果は_のようになる.

1: -28.61 * 0.5 → -14.305
2: 32.51 * 0.5 → 16.255
3: 14.36 * 0.5 → 7.18
4: apple
5: -25.14 * 0.5 → -12.57
6: -0.98 * 0.5 → -0.49
7: -13.2 * 0.5 → -6.6
8: banana
9: -5.71 * 0.5 → -2.855
10: 47.89 * 0.5 → 23.945
11: orange
12: 36.01 * 0.5 → 18.005
13: 28.87 * 0.5 → 14.435
14: melon
15: -26.88 * 0.5 → -13.44
16: peach
17: strawberry
18: -27.33 * 0.5 → -13.665
19: -6.68 * 0.5 → -3.34
20: -51 * 0.5 → -25.5
21: grape
22: 84.98 * 0.5 → 42.49
23: 34.85 * 0.5 → 17.425
24: kiwifruit
25: -25.16 * 0.5 → -12.58
26: lychee
実行結果

準備作業 - 作業ディレクトリの変更

表示するにはここをクリック

作ったプログラムの実行体は,デフォルトで以下の場所に作成される(_).

ソリューション名\プロジェクト名\bin\コンフィギュレーション名\net6.0\プロジェクト名.exe

例えばソリューションをC:\Users\ユーザー名\sources\repoConsoleApp1(ソリューションも同名)という名前で プロジェクトを作成した場合,デバッグモードでビルドすると実行体は以下の場所に作られる.

C:\Users\ユーザー名\sources\repo\ConsoleApp1\ConsoleApp1\bin\Debug\net6.0\ConsoleApp1.exe
VisualStudioのフォルダ構造

プログラムをデバッグ実行する際もこのフォルダを作業ディレクトリとして実行される. ただし,このフォルダは一度ビルドしないと作成されないので,読み込むファイルの場所を 固定しておきたい場合は不便である.

そのためプログラムをデバッグ実行する際の作業ディレクトリを別の場所に設定し,読み込むファイルは その場所に配置するとよい.たとえばプロジェクトフォルダをデバッグ実行時の作業ディレクトリにする. 具体的な手順は以下となる.

  • 【手順】デバッグ時の作業ディレクトリの変更
    1. プロジェクトを作成する(_).
    2. ソリューションエクスプローラー上で,プロジェクト名を右クリックして「エクスプローラーでフォルダーを開く」をクリックする(_).
      • 入力ファイルはこのプロジェクトフォルダの中に置いておく(_).
    3. 開いたフォルダのアドレスバーをクリックして選択状態にして,プロジェクトの場所(=プロジェクトフォルダのパス)をコピーする(_).
    4. ソリューションエクスプローラー上で,ソリューション名を右クリックして「プロパティ」をクリックする(_).
    5. 「デバッグ」→「全般」→「デバッグ起動プロファイルUIを開く 」をクリックする(_).
    6. 「作業ディレクトリ」に,3でコピーしたパスを貼り付けて保存する(_).
デバッグ時の作業ディレクトリの変更

具体的な作業手順が分からなければ_を参考にすること1,2

デバッグ時の作業ディレクトリの変更(動画)

これでデバッグ時の作業ディレクトリの直下に読み込むファイルが配置されるので, _のようにファイル名のみを指定することで, ファイルを開くことができるようになる(以下は入力ファイル名がhoge.txtである場合の例).

ファイルからの読み込み処理
表示するにはここをクリック : 閉じる

ヒント

  • ファイルを1行ずつ読み込みながら,読み込んだ行の内容(文字列)を実数に変換する.
    • 文字列を実数に変換するにはdouble.Parse()メソッドを用いることもできるが,この設問のように解釈に失敗しうる文字列を扱う場合にはdouble.TryParse()メソッドを用いるとよい(double.Parse()メソッドを用いる場合は例外処理が必要となる).
    • この設問ではファイルを読み込みながらその総行数もカウントする必要がある.それほど難しいことではないので方法は各自考えてみよう.
表示するにはここをクリック
  • double.TryParse()メソッド
    • 参考
      • 教科書「なるほどなっとくC#入門」の「文字列を数値に変換する際に例外を出さないもうひとつの方法」(P.428~)
    • このメソッドは,文字列型の引数とdouble型の変数を受け取り,変換に成功した場合はtrueを,失敗した場合はfalseを返す.
    • _はこのメソッドの使用方法,_はその使用例である.
double.TryParse(文字列型の定数・変数・式, out double型の変数)
dobule.TryParse()メソッドの使用方法
double.TryParse()メソッドの使用例
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
double hoge;        // 格納用の変数
string piyo = ... ; // どこからから持ってきた文字列

if ( double.TryParse(piyo, out hoge) )
{
    //
    // 文字列の解釈に成功
    //
    // 変数 hoge に解釈結果が入っているのでそれを使用する.
    //
}
else
{
    //
    // 文字列の解釈に失敗
    //
}
表示するにはここをクリック : 閉じる

  1. Apple社の都合により,iPhone,iPadなどのデバイスでは動画の再生はできません(Apple社はスマートフォン/タブレット製品で,意図的?にVPxやAV1コーデックのサポートを遅らせているため.参考1参考2). ↩︎

  2. Microsoft Edge で動画を閲覧するためには,AV1 Extensionをインストールする必要があります. ↩︎

Last updated on 2023-11-02
Published on 2023-11-02

Powered by Hugo. Theme by TechDoc. Designed by Thingsym.