我在代码中读取了多个.tsv。每行看起来像这样:
3 Port 10: NDI-MF2 Channel:0 3578848 1 OK 0,4881701 0,5157377 -0,5017654 -0,4938989 195,342 -5,154 -394,990 0,9763672 0 Port 11: NDI-MF2 Channel:0 3578848 1 OK 0,1504364 0,9189614 0,2268636 -0,2853273 -93,299 -107,491 -299,260 0,9993857 0 Port 12: NDI-MF2 Channel:0 3578848 1 OK 0,0572628 0,7722947 0,5232752 -0,3556190 -107,537 -121,891 -289,059 0,6039713 0
如您所见,在每一行中,我都有3个端口的数据。第一个数字是我拥有的端口数。
然后,我收集:
(我写了第一个Port的值,所以您可以更好地理解)
由于.tsv中有多行,因此我编写了此代码以进行读取。
bool ProcesarDatos::LeerSigLineaValores(vector <TipoInformacion> *infoModelos, vector<TipoCoordenadas> *infoCoordenadas, double timestamp) {
infoModelos->clear();
infoCoordenadas->clear();
if (fichero.good()) {
char Linea[700];
LeerLinea(Linea, 700);
string NTools, Model, Frame, Face, State, Rz, Ry, Rx, Tx, Ty, Tz, Error, Markers;
string cadena(Linea);
if (cadena.size() == 0) return false;
istringstream divLinea(cadena);
getline(divLinea, NTools, '\t');
HerramientasDetectadas = stoi(NTools.c_str());
if (HerramientasDetectadas != 3) return false;
for (int j = 0; j < HerramientasDetectadas; j++) {
TipoInformacion nuevoModelo;
TipoCoordenadas nuevasCoordenadas;
getline(divLinea, Model, '\t');
nuevoModelo.ModelName = new char[strlen(Model.c_str()) + 1];
strcpy(nuevoModelo.ModelName, Model.c_str());
getline(divLinea, Frame, '\t');
nuevoModelo.Frame = new char[strlen(Frame.c_str()) + 1];
strcpy(nuevoModelo.Frame, Frame.c_str());
getline(divLinea, Face, '\t');
nuevoModelo.Face = new char[strlen(Face.c_str()) + 1];
strcpy(nuevoModelo.Face, Face.c_str());
getline(divLinea, State, '\t');
nuevasCoordenadas.state = new char[strlen(State.c_str()) + 1];
strcpy(nuevasCoordenadas.state, State.c_str());
getline(divLinea, Rx, '\t'); //Here I lose R0 intentionally.
getline(divLinea, Rx, '\t');
nuevasCoordenadas.Rx = stringtoDouble(Rx);
getline(divLinea, Ry, '\t');
nuevasCoordenadas.Ry = stringtoDouble(Ry);
getline(divLinea, Rz, '\t');
nuevasCoordenadas.Rz = stringtoDouble(Rz);
getline(divLinea, Tx, '\t');
nuevasCoordenadas.Tx = stringtoDouble(Tx);
getline(divLinea, Ty, '\t');
nuevasCoordenadas.Ty = stringtoDouble(Ty);
getline(divLinea, Tz, '\t');
nuevasCoordenadas.Tz = stringtoDouble(Tz);
getline(divLinea, Error, '\t');
nuevasCoordenadas.errorValue = stringtoDouble(Error);
getline(divLinea, Markers, '\t');
nuevasCoordenadas.marker = stoi(Markers);
nuevasCoordenadas.Time = timestamp;
infoModelos->push_back(nuevoModelo);
infoCoordenadas->push_back(nuevasCoordenadas);
}
return true;
}
else {
cout << "\t File not good" << endl;
return false;
}
}
此代码可以按我的意愿工作,但是我有2GB的文件,每个.tsv都有8000至25000行。我花了30分钟时间执行代码并生成我想要的Excel。
我不再需要使用此代码,但是如何提高方法的速度?
35000行= 16,500 ms现在(16s)