Так что моя проблема здесь в том, что я не знаю, как заставить текстовый файл (который заполнен 1000 построчными командами, написанными на Венере 2) правильно вводить в цикл while, который я пытался создать для повторной отправки позиции команды к моторам. Есть текстовый файл с координатами, записанными в командах Venus 2 (малоизвестный язык; очень неудобно работать). Я не поклонник компьютерного программирования на С ++, но я знаю большинство идеалов базового и среднего уровня С ++. Если у вас есть предложения или комментарии, дайте мне знать, что вы думаете !!
также вот фрагмент того, как файл выглядит
0,0229 1 нм 0,0317 2 нм
0,0276 1 нм 0,0311 2 нм
0,0323 1 нм 0,0302 2 нм
0,0347 1 нм 0,0310 2 нм
0,0364 1 нм 0,0310 2 нм
0,0422 1 нм 0,0343 2 нм
0,0466 1 нм 0,0324 2 нм
позиция, motorID, тип движения, позиция, motorID, тип движения
(Мотор NI Pollux II x2)
//text file is opened
int i = 0;
double c1[1000];
char line;
cout << "Press any key to begin jitter.\n";
cin.get();
cout << "Running the jitter data...\n";
/* here there should be a conversion from double to char */
while (!jitterFile.eof()) {
jitterFile >> c1[i];
/* or here there should be a conversion */
if (serial.Open(18, 19200)){
static char szMessage[] = /* here is where the converted data should go */;
int nBytesSent = serial.SendData(szMessage, strlen(szMessage));
assert(nBytesSent == strlen(szMessage));
}
else{
cout << "error occurred with runJitter()...\n";
}
cout << c1[i] << endl;
++i;
}
//Sleep(1000);
jitterFile.close();
return 0;
}
Во-первых, подумайте, нужно ли вам конвертировать его в двойное число. Я вижу, вы создаете строковое сообщение для отправки по последовательному порту.
Этот пример должен показать вам, как делать то, что вы ищете. Если вам нужны позиции для последующего использования, то я бы рекомендовал не использовать двойной массив. Вместо этого прочитайте каждую строку, разбейте ее на строковые компоненты, а затем создайте строковое сообщение для отправки на последовательный порт. Если вам нужны двойные позиции, отодвиньте их назад< double> для использования позже.
#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
#include <deque>
#include <cstdlib>
using namespace std;
size_t sendToSerial(const char* msg, size_t len) {
return len;
}
int main(int argc, const char** argv) {
ifstream jitterFile("jitter.txt");
int i = 0;
std::deque< double > c1Deque;
//double c1[1000];
//char line;
cout << "Press any key to begin jitter.\n";
cin.get();
cout << "Running the jitter data...\n";
/* here there should be a conversion from double to char */
string line;
string pos1;
string motor1;
string motion1;
string pos2;
string motor2;
string motion2;while (getline(jitterFile, line)) {
std::istringstream sstrm(line);
sstrm >> pos1 >> motor1 >> motion1 >> pos2 >> motor2 >> motion2;
/* or here there should be a conversion */
c1Deque.push_back(atof(pos1.c_str()));
if (true/*serial.Open(18, 19200)*/){
std::string message = pos1;
message += ",";
message += pos2;
int nBytesSent = sendToSerial/*serial.SendData*/(message.c_str(), message.length());
//assert(nBytesSent == strlen(szMessage));
}
else{
cout << "error occurred with runJitter()...\n";
}
cout << pos1 << endl;
++i;
}
//Sleep(1000);
std::cout << "There are " << c1Deque.size() << " entries in the deque" << std::endl;
jitterFile.close();
return 0;
}