TABをセパレータとし、中央のフィールドを空にしたテキストファイルを読み込むC++メソッド?
2022-02-16 10:48:15
データファイル:testData.txt
内容です。
111 222 444 555
getline() は testData.txt の最初の行を文字列に読み込み、次に n 番目のセパレータを検索して位置を特定し、n 番目のフィールドの長さを決定して substr を使い、そのフィールドをインターセプトして対象の文字列に割り当てています。
<スパン
手順
#include <iostream>
#include <fstream>
using namespace std;
void GetStringFromCSV(std::string line, int nIdx, std::string &str)
{
int nSPos = 0; //record the start position
for(int i = 0; i < nIdx - 1; ++i)
{
nSPos = line.find('\t', nSPos); //find the next TAB starting from nSPos
++nSPos; //find the next character from the currently found '\t' key position, starting from
}
int nEPos = line.find('\t', nSPos); //find the end position of the third field
if(nEPos ! = string::npos) //find the TAB character of
{
str = line.substr(nSPos, nEPos - nSPos);
}
else
{
str = line.substr(nSPos, line.size() - 1 - nSPos);
}
}
int main(void)
{
string sTarget, line;
ifstream in(". /testData.txt");
if(!in.is_open())
{
cout << "open . /testData.txt fail!" << endl;
return -1;
}
getline(in, line);
GetStringFromCSV(line, 3, sTarget);
cout << ". /testData.txt The contents of the third field in the first line of the record, separated by the tab key, are: " << sTarget << endl;
in.close();
return 0;
}
ps:他のデリミターで区切られたファイルにも適用されるように'˶'ᴗ'を変更するだけです。
関連
-
[解決済み] 非常に基本的なC++プログラムの問題 - バイナリ式への無効なオペランド
-
[解決済み】リンカーエラーです。"リンカ入力ファイルはリンクが行われていないため未使用"、そのファイル内の関数への未定義参照
-
[解決済み】Enterキーを押して続行する
-
[解決済み] エラーです。メンバーはアクセスできません
-
[解決済み] gcc の警告: 関数の戻り値の型修飾子について
-
[解決済み] C++ ポインターの配列:delete または delete []?
-
[解決済み] C++ Boost ASIO simple periodic timer?
-
[解決済み] Qt: -lGL が見つからないエラー
-
[解決済み] C++ Winsock 10093エラー
-
[解決済み] whileループを停止させたい時に停止させることができない
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C++ 非推奨の文字列定数から「char*」への変換について
-
[解決済み】エラー。switchステートメントでcaseラベルにジャンプする
-
[解決済み] Windows SDK version 8.1" が見つかりませんでした」というエラーを修正する方法を教えてください。
-
[解決済み] cin.get()が動作しない
-
[解決済み] C++の変数に初期化子があるが、型が不完全?
-
[解決済み] GLSLドットプロダクトの不具合
-
[解決済み] コンパイル時の非互換ライブラリのスキップ
-
[解決済み] C++エラー - 'char' と 'int' の前に一次式があることが予想されます。
-
[解決済み] G++コンパイラーエラー - ここで最初に合成されたメソッドが必要です。
-
[解決済み] コンストラクタでのエラー : 識別子を期待されますか?