こんてんつ
C++を使ってテキストファイル(.txt)を読み込み、特定の行を抽出するプログラムについてまとめる。1行ずつgetline関数で取得する方針でやっていく。
- 全ての行を読み込んでcoutでコンソールに出力する
- 特定の行を見つけたら次の行を出力する
- 2回目に条件に一致したものを読み込む
関連記事 contents-open.hatenablog.com
例題
下記のテキストファイル(myTxtFile.txt)を用いる
myTxtFile.txt Hello. ### TOKYO 2020 ### tennis Naomi Osaka marathon Suguru Osako softball Yukiko Ueno Miu Goto soccer Takefusa Kubo tennis Kei Nishikori
全ての行を読み込んでcoutでコンソールに出力する
getline(myFile, line)は、第一引数に読み込んだストリームを。第二引数にその文字列を格納する変数を持つ。getlineはファイルの終了(EOF)が出ると0を返し、whileの条件式に書くことで全ての行が読み込まれたら自動で終了する仕組みである。
#include <iostream> #include<fstream> #include<string> using namespace std; int main() { fstream myFile; myFile.open("myTxtFile.txt", ios::in);//read if (myFile.is_open()) { string line; while (getline(myFile, line)) { cout << line << endl; } myFile.close(); } system("pause>0"); }
特定の行を見つけたら次の行を出力する
if(line == "marathon")でmarathonという文字列の行を見つけさせる。その後、getline(myFile, line)で1行進めて、coutで文字列を出力する。
#include <iostream> #include<fstream> #include<string> using namespace std; int main() { fstream myFile; myFile.open("myTxtFile.txt", ios::in);//read if (myFile.is_open()) { string line; while (getline(myFile, line)) { if(line == "marathon"){ getline(myFile, line); cout << line << endl; } } myFile.close(); } system("pause>0"); }
2回目に条件に一致したものを読み込む
int iというカウンターを使って、2回目のtennisに反応するようにした。
#include <iostream> #include<fstream> #include<string> using namespace std; int main() { fstream myFile; myFile.open("myTxtFile.txt", ios::in);//read if (myFile.is_open()) { string line; int i; i = 1; while (getline(myFile, line)) { if(line == "tennis"){ if (i == 2) { getline(myFile, line); cout << line << endl; } else { i++; } } } myFile.close(); } system("pause>0"); }