一個.csv
文件是這樣寫的:C++:讀一個CSV文件,並提取某些部分
M9005U00-X30A0S00-1;BAS;X;-0.002;-0.095
S707RY00-X30AOS00-1;HMV;X;+0.002;+0.081
W3005U00-X30BOJ00-1;BAS;X;+0.026;-0.138
H307QZ00-X30BOJ00-1;HMV;X;-0.025;+0.122
....
現在我想建立一個功能,即
double find_and_extract (string sss)
當此功能被使用以關鍵字爲參數,例如
find_and_extract (W3005U00-X30BOJ00-1);
它會在.csv文件中逐行搜索,找到相應的響應行(在這種情況下,它應該是第三行),並在此行中提取certin部分「+0.026」,返回爲double。
我該怎麼寫這個函數?
編輯:這是到目前爲止,我寫的代碼:
#include <iostream>
#include <fstream>
#include <string>
#include <stdio.h>
#include <vector>
#include <iterator>
#include <cstdlib>
#include <cstdio>
#include <sstream>
#include <stdlib.h>
using namespace std;
void main()
{
find_and_extract (W3005U00-X30BOJ00-1);
}
double find_and_extract (string sss)
{
vector<string> vecarray;
ifstream infile("C:\\Data\\testdata.csv");
string temppo;
string contnt;
char csv_extract[40];
stringstream ss;
vector <string>::iterator ptr;
while (!infile.eof())
{
infile.getline(csv_extract,40);
ss << csv_extract;
ss >> contnt;
vecarray.push_back(contnt);
}
for (ptr=vecarray.begin();ptr!=vecarray.end();ptr++)
{
if ((*ptr).find(sss)==0)
temppo = (*ptr).substr(27,6);
}
return (strtod(temppo.c_str(),NULL,0));
}
誰能幫我指出錯誤?
-1:你期望有人來做你的工作,而不是你?答案可能是 - 您應該使用衆所周知的最佳實踐編寫此功能,記住可維護性並處理可能的錯誤。 – agibalov
我想說'getline','substr'和'strtod'是一個選項。 –
即使它不起作用,你能告訴我們你試過的東西嗎?如果你一開始就陷入困境,請指出,以及爲什麼你被困住了。 –