

C#で台形の面積を求めるプログラムを作成しています。
プログラムの手順としては、
①台形の面積を求めたいことを宣言する。
②テキストファイルのファイル名を入力してもらう。
③入力されたテキストファイルを読み込む。(テキストファイルには上底、下底、高さの数値が記入されている。
④テキストファイルの数値を式に代入し台形の面積を求める。
という流れになっています。
①②③はできたのですが、④の操作をどうすればよいかわかりません。
いろいろ調べてはみたのですが、よくわかりませんでした。
④の操作をどうすればよいか教えてください。
自分なりに作ったプログラムは下記の通りです。
よろしくお願いします。
using System;
using System.IO;
class Test
{
public static void Main()
{
try
{
//台形の面積を求めたいことを宣言する
Console.WriteLine("台形の面積Sを計算します。");
Console.ReadLine();
//読み込みたいファイル名を入力してもらう。
//テキストファイルには上底、下底、高さの数値が入力されている。
Console.Write("読み込むファイル名を入力してください。(拡張子も含む)→");
var str = Console.ReadLine();
string filePath = Path.GetFileName(str);
Console.WriteLine(filePath);
Console.ReadKey();
//ファイルを読み込む
using (StreamReader sr = new StreamReader(str))
{
string line;
while ((line = sr.ReadLine()) != null)
{
Console.WriteLine(line);
}
}
Console.Read();
}
catch (Exception e)
{
Console.WriteLine("ファイルを読み取れませんでした:");
Console.WriteLine(e.Message);
Console.Read();
//読み込んだテキストファイルの上底、下底、高さの数値から台形の面積を求める。
Console.Write("台形の面積Sは");
}
}
}
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
○どの変数が、ある時点で、何を記憶しているか、を整理しましょう。
例えば、 変数line は Readline()でファイルから1行読み込んだものを記憶しています。
ですが、ループで同じ変数を使い回しているので、2行目を読み込んでしまったら、1行目の内容は忘れてしまいます。
各行から後で使うための値を取得するなら、次のいずれかの方法を使う必要があります
・次のReadLine() より前に、現在の行の文字列から数値を取り出し記録する。
・別の変数(配列、List等を含む)に読み出した全てを記憶させ、後で各数値を取り出す
○ double.Parse(string s) に指定する文字列 s は、「数値を表現した文字列」である必要があります。
現在テキストファイル読み込んだ文字列は、1行全て、つまり「上底=2」等となっています。
これは「上底=」という余計な文字列が付いているので、「数値を表現した文字列」ではありません。
よって、Parseはエラー(例外)になります。
Parseする前に、数字の部分だけ抜き出す必要があります。
方法はいくつかあります。
・ "=" を探して、それ以降をSubStringで取り出す
・数字を抜き出すような正規表現を使う
・"=" で Split して数字の部分を使う
初心者向け入門書の課題のようなプログラム内容と、文字列から数字の部分を抜き出すというやや高度な操作とが、ちぐはぐな気がします。
テキストファイルの内容は、本当にそれであっているのですか?
テキストファイルには
2
3
4
とだけ書いてあって、
それを
・文字列変数line読み込んで
・double a = double.Parse(line) 等と数値にして
・確認用に Console.WriteLine("上底=" + a.ToString()) ; みたいに出力する
ということなのでは?
No.3
- 回答日時:
もっと具体的に書いてほしいんだけどなぁ.... 例えば「うまくいきませんでした」というのは, なにがどうなって「うまくいきませんでした」と判断した? 「うまくいかない」ときにどうなるか, ちゃんと理解してから使ってる?
あと「すべてを一気に読み取る」ってどういうこと? ReadLine でそれだけ全部読み込んだってこと?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題です 2 2023/07/21 10:51
- C言語・C++・C# [C言語] コメント文字列を無視して、数値データを読み込むプログラム部分について 5 2022/10/05 11:03
- C言語・C++・C# C# で、あるフォルダー内にあるすべてのテキストファイルを別のフォルダーにコピーする。 4 2022/11/21 13:23
- Java java 次の機能を有するメソッドを自クラスに作成し、実装したいです。 機能 名前判定機能 →名前が 3 2022/06/16 16:08
- C言語・C++・C# PC画面を録画するプログラムでdllの読み込みエラー 1 2023/04/22 08:31
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- HTML・CSS Google Search Consoleについて 1 2022/06/05 10:27
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- Excel(エクセル) エクセルでSUMIFS関数で条件範囲の部分が#valueになる。 4 2023/04/28 12:42
- システム CSVファイルのマッピング処理の省力化 1 2022/11/24 00:01
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
テキストファイルを自動編集したい
-
文字列
-
Excel+VBAでフランス語を扱いた...
-
エクセルのマクロについて教え...
-
Linuxにてテキストファイル出力...
-
VBscriptでWebサイトから取得し...
-
Javaのプロパティファイルの文...
-
VBAでテキストファイルを保存
-
テキストファイルの一部分を抽...
-
Delphiのreadlnについて
-
ファイルのチェックサムを改行...
-
C言語のソースからコメントを抜...
-
Frontpage Express の使い方
-
テキストファイル(英語&日本...
-
TXTファイルデーターをEX...
-
ファイルの入出力でのテキスト ...
-
テキストファイルを読んで、Exc...
-
C#のプログラムについての質問
-
base64?デコード?
-
英単語の出現数を数える方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ATTファイルってどうやって開け...
-
テキストファイルの一部分を抽...
-
既存のテキストファイルを開く方法
-
VB(VBA)で、バイナリデータを使...
-
テキストファイル固定長データ...
-
テキストファイル内容の、16進...
-
WORDのVBAで差し込み印刷時、デ...
-
VBSでテキストファイルの2行目...
-
Excel VBAが徐々に遅くなる
-
StreamReaderで読み込んだファ...
-
ファイル変換
-
[VB.NET] 処理の高速化を行いた...
-
テキストファイルをSQLServerデ...
-
TXTファイルデーターをEX...
-
バイナリファイルの区別
-
Zbarというソフトについて
-
テキストファイルの特定行の削...
-
バイナリデータの中からMidのよ...
-
エクセルVBAでメールの自動作成...
-
UTF-8とASCIIコードにおける互...
おすすめ情報
文字列を数字に変換しようと思いいろいろ試しましたがよくわかりませんでした。
double d = double.Parse(str);
Console.WriteLine(d);
Console.ReadKey();
Console.Write("台形の面積Sは");
double S;
S = (d + d) * d / 2.0;
Console.WriteLine(S);
Console.ReadLine();
double型に変換したいと思い、上記のようなプログラムを追加しましたがうまくいきませんでした。
また、読み取るテキストファイルには、上から、
上底=2
下底=3
高さ=4
と書いてあります。
テキストファイルは、
上底=2
下底=3
高さ=4
のすべてを一気に読み取るのですが、それも問題なのでしょうか?
ファイルを一気に読み取るというのは、テキストファイル名を入力するとテキストファイルに書いてある文を全て読み取ります。
また、追加プログラムを加えてやると結果が面が画像のようになります。
kmeeさんの言う通りです。
テキストファイルには
2
3
4
とだけ書いてあって、
それを
文字列変数line読み込んで、
double a = double.Parse(line) 等と数値にして台形の面積を計算するプログラムを作成したいです。
・次のReadLine() より前に、現在の行の文字列から数値を取り出し記録する。
・別の変数(配列、List等を含む)に読み出した全てを記憶させ、後で各数値を取り出す。というのはどうすれば良いでしょうか?