записать вектор из кода C ++ в файл и затем прочитать его в Matlab

0

У меня есть вектор типа данных double, сгенерированный в c++, и я пытаюсь записать его в текстовый файл, чтобы затем загрузить текстовый файл в matlab, чтобы построить данные из вектора по сравнению с данными, которые уже находятся в мое рабочее пространство Matlab. Я могу создать файл с именем real_data2.txt, и программа запускается без ошибки, но затем, когда я пытаюсь загрузить файл в Matlab или открыть его в текстовом приложении, содержимое файла является тарабарской тактикой, говорить. Код, который я использую для создания файла:

ofstream out("real_data2.txt");
    if(!out){
        cout << "Cannot open file.\n";
        return;
    }
for(int i = 0; i<N; i++){
    out.write((char *) &out2[i][0], N);
}
out.close();

где N - длина out2. Это успешно создает файл 'real_data2.txt'. Затем я помещаю сгенерированный файл в путь matlab и использую A = textread('real_data2.txt') в matlab, чтобы попытаться прочитать файл. Сообщение об ошибке, которое я получаю:

Ошибка при чтении данных. Чтение номера ошибки из файла (строка 1, поле 1) ==>> Uíl¯9 @9ÊÝÖ (@9Ò "= £ P <@¨CÁ\n

Ошибка в textread (строка 175) [varargout {1: nlhs}] = dataread ('файл', varargin {:}); %#ОК

и когда я дважды щелкаю txt файл, я получаю файл, содержащий текст вроде:

> Uíl¯9 @9ÊÝÖ (@9х "= £ P <@cá

' C@Bw| N¯8@]H~=@7@7ÂÙjó õ?ñXéWSO@¹U¥A° õ¿"D¾;@@¡ԨÊëQÀwnr!úU@ß 7XÀjw}NÀJA(×FÀ|ûó>%÷GÀa¬W¯7@·âÖ3Ð C@Bw| N¯8@]H~=@7@7ÂÙjó õ?ñXéWSO@¹U¥A° õ¿"D¾;@@¡ԨÊëQÀwnr!úU@ß 7XÀjw}NÀJA(×FÀ|ûó>%÷GÀa¬W¯7@·âÖ3Ð ÀÉ¿x¨G @Ï¿U ° ÜÁ6 @ò5 ^ → @qzáme [ÀKÆ] T ^ 'À¼7CJK @EhúôP: ÀF¼¸ý @íÀ ÷ ¾§ÎC @2w ^ = AÀÛ "½ñðúr @> ò (÷ @B˶xÀË6Y7¸ @s ÷ ãCÀ <μ} lÀ<uÄòÚtÀêGÂ0KZÀ~iò*~@$áu@Àq >¢Ò E{@Õbp"^8DÀ4@Ëçc@nê'È1ÀÑJ 5|@$éEy ÀUßÎzí @, u ° <ä @^ Q4íbÀ4õÆÚ @6S8 (* ÀD $ ° ä? u @kn | ½Àz> ÓvÀ'F @ôuc @þÃjàÂ: À KμÕv @ý/ú ÁL] Àv ° ¶ó [ CN00] @íæ¿ ¥ òC @ðvwjc @WÔ'jÀ¡ @y¿ò5dI @M¸ö/þät @ZÝd> @Cåh0 ~ ÀLÛoE @cܼ ¥ À§ÝY. ^ Àù} øDzÀßH\XÀ|ähöT ~ @ÍÚ\åþÀá @Êà¤Ï "TÀAxx @r $ Ü @u @BãÀ l @ß xç @½ô¶% ÖbÀ {Ì ± Àò # @HëSuÀ [ÑÑÏÏ) w @zû% ÀGK" 7qiÀ||ÊÊÀÀxeIÀy8nÓV @ØÕ3 ~ yÀ³ > ú¹ @vc @ñáĶmÀ & Q¹ig @? klgmÀ'Ìh & ûu @J "kGiÀ | 7kê @y- @ªôg @ïIEY @\Ayi? S\@eظhã @ðô6fzÀ ås¬ · @ROÅÍjÓÓÒ × SJ Àýßv¨ b> À (Ê- ߸Àów Ás @û öÅÀj|Ðî @ ÎÀ¾&ñ~.U@_ÿz <~ @qådøIÛz @4) Áe @: 'N {À = ào¸ @ÆlëíVÒÀ ÀÍûY7 | XÀ¬' Çä1ÀØ @Á Çj @¨k8À¨

Любые идеи, в которых я ошибаюсь? Я не знаю много об этой теме, но я предполагаю, что это имеет какое-то отношение к попытке указать местоположение данных в указатель char, но я не уверен и не знаю, как обойти это, поскольку я попытались изменить эту строку безуспешно с такими вещами, как out.write((char *) out2[i][0], N); и out.write((double *) &out2[i][0], N); который я понимаю теперь, возможно, не имеет особого смысла... В любом случае, любая помощь будет принята с благодарностью! Дайте мне знать, знаете ли вы, как решить эту проблему!

  • 0
    что насчет fprintf?
  • 3
    Вы пишете свои данные в двоичном виде (необработанные двойные значения) - вам нужно записать их в виде текста. Используйте std :: cout, а не write ().
Показать ещё 3 комментария
Теги:

1 ответ

0
Лучший ответ
out << out2[i][0];

это правильный путь.

Ваш выход двоичный.

  • 0
    Очень простой, идеальный ответ! Спасибо! Я хотел, чтобы значения в файле были разделены пробелами, которые я не указал в вопросе, поэтому мне просто пришлось использовать out << out2[i][0]<<" "; вместо :) Простая природа этого ответа и вышеприведенных комментариев действительно подчеркивают, насколько неразвиты мои способности в кодировании ... Спасибо всем за ваши ответы!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню