C++builderのファイル入力について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ツンドラ

C++builderのファイル入力について

#1

投稿記事 by ツンドラ » 9年前

enbacadero C++ bullderを用いてVCLアプリケーション開発の勉強をしています。

フォーム上にEdit1とButton1のみを配置し、Button1のオンクリックイベントに以下のようなコードを書きました。

理想とする動作は「csvファイルのファイル名をEdit1に入力し、Button1をクリックすると、csvファイルの1行目が表示される」というものです。

コード:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
	AnsiString filename = Edit1->Text;
	AnsiString str; /*ファイルから文字列をもってくる*/

	filename = ".csv"; /*文字列に.csvを付与する*/

	ifstream fin;
	fin.open(filename.c_str(), ios::in); /*ファイルを読み込み専用でオープン*/

	if( !(fin.fail()) )
	{
		fin.getline(str); /*csvファイルから1行取得 → エラー*/
		ShowMessage(str); 
	}
}
fin.getline(str);で以下のエラーが出ます。
[bcc32 エラー] Unit1.cpp(30): E2285 'istream::getline(AnsiString)' に一致するものが見つからない

ファイルの一行を読み込むという関数でgetlineを採用しました。
getline関数の使い方を間違えているのでしょうか。

アドバイスよろしくお願いします。

ツンドラ

Re: C++builderのファイル入力について

#2

投稿記事 by ツンドラ » 9年前

".csv"を付与する場所で構文ミスをしていました。
正しくは以下のコードです。

filename = ".csv";であったのをfilename += ".csv";に直しました。

コード:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
	AnsiString filename = Edit1->Text;
	AnsiString str;

	filename += ".csv";

	ifstream fin;
	fin.open(filename.c_str(), ios::in);

	if( !(fin.fail()) )
	{
		fin.getline(str);
		ShowMessage(str);
	}
}

アバター
h2so5
副管理人
記事: 2212
登録日時: 13年前
住所: 東京
連絡を取る:

Re: C++builderのファイル入力について

#3

投稿記事 by h2so5 » 9年前

ドキュメントを読みましょう。
http://www.cplusplus.com/reference/stri ... g/getline/
http://docs.embarcadero.com/products/ra ... tring.html

コード:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    AnsiString filename = Edit1->Text;
 
    filename += ".csv";
 
    ifstream fin;
    fin.open(filename.c_str(), ios::in);
 
    if( !(fin.fail()) )
    {
        string line;
        getline(fin, line);
        AnsiString str(line.c_str());
        ShowMessage(str);
    }
}

ツンドラ

Re: C++builderのファイル入力について

#4

投稿記事 by ツンドラ » 9年前

h2so5 さんが書きました:ドキュメントを読みましょう。
http://www.cplusplus.com/reference/stri ... g/getline/
http://docs.embarcadero.com/products/ra ... tring.html

コード:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    AnsiString filename = Edit1->Text;
 
    filename += ".csv";
 
    ifstream fin;
    fin.open(filename.c_str(), ios::in);
 
    if( !(fin.fail()) )
    {
        string line;
        getline(fin, line);
        AnsiString str(line.c_str());
        ShowMessage(str);
    }
}
ご指摘ありがとうございます。ドキュメントを読んでgetline()には引数が2つ必要なことがわかりました。
僭越ながら改善して頂いたプログラムを実装してみたのですが、やはりgetline()のところで以下のエラーが出ます。

[bcc32 エラー] Unit1.cpp(36): E2268 未定義の関数 'getline' を呼び出した

しっかりインクルードも行っています。エラーの原因はなんなのでしょうか。

コード:

#include <iostream>
#include <string>

アバター
h2so5
副管理人
記事: 2212
登録日時: 13年前
住所: 東京
連絡を取る:

Re: C++builderのファイル入力について

#5

投稿記事 by h2so5 » 9年前

C++ Builder特有の問題のような気がします。

MoonGate

Re: C++builderのファイル入力について

#6

投稿記事 by MoonGate » 9年前

using namespace std;

が抜けてるせいだと思うんですがね。

Bull
記事: 149
登録日時: 9年前

Re: C++builderのファイル入力について

#7

投稿記事 by Bull » 9年前

MoonGate さんが書きました:using namespace std;

が抜けてるせいだと思うんですがね。
そうすると、"string" ゃ "ifstream" でもエラーになりそうな気がします。
また、"ifstream" を使うときは <fstream> が必要な気がしますが、
その部分はエラーではないんですよね、不思議ですね。

ツンドラ

Re: C++builderのファイル入力について

#8

投稿記事 by ツンドラ » 9年前

h2so5様 MoonGate様 Bull様
コメントありがとうございます。また返信が遅れて申し訳ありません。

学校で使用しているので、また学校でコーディングしてみます。
現状をこちらに書き込みますのでまたアドバイスを頂けると幸いです。

ツンドラ

Re: C++builderのファイル入力について

#9

投稿記事 by ツンドラ » 9年前

スレ主です。getline()をC++builderで使いたいということで建てたこのスレッドですが、学校の先生に尋ねてみてもエラーの原因がわからずじまいでした。
アドバイスを下さった方々には申し訳ないのですが、C++builderでgetline()を使うのは諦めて別の手法を取ろうと思います。
そのときはまた質問するかもしないので、見かけた際はまたアドバイスをいただけると幸いです。

閉鎖

“C言語何でも質問掲示板” へ戻る