0
내 작업은 로그와 텍스트 파일을로드하고 매개 변수를 값으로 분리하는 C++로 간단한 programm를 만드는 것입니다.정수형 벡터를 가진 구조체의 벡터
#CURRENT_OPTIMIZED_BVH_NODES
210023
#CURRENT_OPTIMIZED_BVH_COST
118.856
#CURRENT_OPTIMIZED_BVH_COST_RATIO
1
#ANIMATION_TIME
0.91
#REFIT_TIME
0.0411972
#UPDATE_TIME
0.000135373
#UPDATE_TIME_SUM
0.000135373
#BUILD_TIME_SUM
0.000135373
#UPDATE_REFIT_RATIO
0.00328597
...
그리고 내 작업은 cmd를 나타납니다 출력을 할 때 몇 가지 매개 변수의 사용자 쓰기 이름 :
입력 파일의 구조는 같다. 좋아요 :
#CURRENT_OPTIMIZED_BVH_NODES
210023
210024
210065
210047
265400
....
내 프로그램은 지금 이와 같습니다. 나는 두 가지 문제가있다 - 나는 어떻게 벡터를 다루는 지 모른다. 그러나 나는 동적 배열 (아무리 많은 다른 매개 변수가 파일에 있고 또한 얼마나 많은 값을 가진 단일 매개 변수인지 알지 못한다.)과 argc를 사용하는 방법 때문에 그것들이 필요하다. argv 내 출력. 내가 조언을 많이 발견했지만, 아무데도 연습이 난 내 코드를 사용할 수, 없었다 :
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <stdio.h>
#include <vector>
using namespace std;
struct ParStruct
{
string name;
vector<double> value;
double average;
double min;
double max;
double median;
};
void WriteParameter(ParStruct Parameter, int SizeOfValueArr)
{
cout << Parameter.name << endl;
for (int i = 0; i < SizeOfValueArr; i++){
cout << Parameter.value[i] << endl;;
}
}
int main(int argc, char *argv[])
{
vector <ParStruct> Parameter;
Parameter.push_back(ParStruct());
Parameter[0].value.push_back(double());
string s = argv[0];
argv[1];
int LogNumber, LineNumber = 1, optionnumber;
ifstream LogFile;
double ParValue;
string MemoryLog, options, fileline;
string LogFilePath;
cout << "Path: ";
getline(cin, LogFilePath);
LogFile.open(LogFilePath);
while (LogFile.good()){
while ((getline(LogFile, fileline)) && !(LogFile.eof())) {
if (fileline[0] == '#'){ //Parameter
MemoryLog = fileline;
for (int i = 0; i < Parameter.size(); i++) {
if ((fileline != Parameter[i].name) && Parameter[i].name.size() < 2) {
Parameter[i].name = fileline;
}
else
{
Parameter.push_back(ParStruct());
Parameter[i].name = fileline;
}
}
}
else {
istringstream Number(fileline);
Number >> ParValue;
for (int i = 0; i < Parameter.size(); i++) {
if (Parameter[i].name == MemoryLog) {
for (int m = 0; m < Parameter[i].value.size(); m++) {
if (Parameter[i].value[m] <= 0) {
Parameter[i].value[m] = ParValue;
}
}
}
}
}
}
}
for (int i = 0; i < Parameter.size(); i++){
WriteParameter(Parameter[i], Parameter[i].value.size());
}
LogFile.close();
return 0;
}
나는 일반적인 구조가 잘못되었다고 생각합니다. 당신은'map' (C++ lib 문서 확인)을 매개 변수 이름으로 키로, 그리고 값을 읽기 값의 벡터로 생성해야합니다. BTW 항목을 반복하는 동안 뭔가 push_back ('Parameter.push_back (ParStruct())'). 소리가 틀립니다. –
무엇을 묻고 있습니까? 왜이 [tag : c]라고 태그를 붙였습니까? –
@ Jean-FrançoisFabre 음, 틀린 것처럼 들리 겠지만 완벽하게 작동합니다. 필자는 항상 NULL 값을 가진 새로운 배열을 생성해야하며 정확히이 (Parameter.push_back (ParStruct()))를 수행해야합니다. 왜 나 한테 물어 보지 마. 초보자 야. D – M4rty32