【发布时间】:2011-08-18 12:44:45
【问题描述】:
.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文件中逐行搜索,找到对应的行(本例应该是第三行),并提取该行中的某些部分“+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:你希望有人代替你做你的工作吗?答案可能是——你应该使用众所周知的最佳实践来编写这个函数,牢记可维护性并处理可能的错误。
-
我会说
getline、substr和strtod的组合是一种选择。 -
你能告诉我们你尝试了什么,即使它不起作用?如果您一开始就卡住了,请说明这一点,以及卡住的原因。