Встречаясь с проблемой, где мне нужно преобразовать двойной массив в символ

Так что моя проблема здесь в том, что я не знаю, как заставить текстовый файл (который заполнен 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;
}

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;
}
0

Другие решения


По вопросам рекламы [email protected]