|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
02.01.2020, 00:54 | #1 |
Форумчанин
Регистрация: 13.09.2019
Сообщений: 119
|
Есть ли в С++ аналог фортрановского оператора format? C++ Fortran Format
Здравствуйте, народ
Передо мной тут встала задачка перевести кое-какие древние программки с Fortran-77 на С++. В принципе ничего слишком сложного нет, но там в них довольно специфический вывод данных в файл, и возможно, придется добиваться его полного соответствия. Вот такой пример, например: Код:
|
02.01.2020, 08:58 | #2 |
фрилансер
Форумчанин
Регистрация: 11.10.2019
Сообщений: 980
|
archerix, аналог то есть, но не однозначный http://www.c-cpp.ru/content/printf
или с использованием библиотек MFC - CString::Format Qt - QString::arg но, на мой взгляд, наименее мозгодробительным вариантом будет использовать конвертер (из полученного результата выдрать форматирование). В тырнете множество, вот первый попавшийся https://en.wikipedia.org/wiki/F2c |
02.01.2020, 12:13 | #3 |
Форумчанин
Регистрация: 13.09.2019
Сообщений: 119
|
Что-то не доверяю я автоматике Хотя в данном случае будет интересно посмотреть, что робот напишет про формат
А библиотеки подключать лишние не очень хочется. З.Ы. Попробовал какой-то автоматический конвертер, он вообще не понял этих форматов Что в принципе логично, если в языках нет прямого аналога. Последний раз редактировалось archerix; 02.01.2020 в 13:37. |
02.01.2020, 12:57 | #4 |
Форумчанин
Регистрация: 13.09.2019
Сообщений: 119
|
А как думает общество, что в принципе проще применить в данном случае? Оператор fprintf или ofstream - там ведь тоже можно вроде задавать формат.
Повторюсь - задача стоит в том, чтобы выдать в файл строку, состоящую из чисел и, возможно, текстовой вставки строго так же, как в оригинале. Надо задать общее число цифр числа и знаки после запятой. Вот пример вывода: Код:
Последний раз редактировалось archerix; 02.01.2020 в 13:57. |
02.01.2020, 14:40 | #5 |
gamer
Участник клуба
Регистрация: 09.05.2015
Сообщений: 1,529
|
Б.И. Березин, С.Б. Березин. "Начальный курс C и C++". 1999 г.
Страница 250. Для того, чтобы организовать форматированный ввод и вывод, аналогичный тому, что предоставляют пользователю функции printf () и scanf (), в языке C++ используются два способа. Первый состоит в применении функций - членов класса ios. При втором способе употребляется специальный вид функций, называемых манипуляторами (manipulator). Далее следуют несколько параграфов, посвященных этим вопросам.
мой канал на Ютубе: youtube.com/@games-zz3ju/videos/
мой канал на Рутубе: rutube.ru/channel/31423139/videos/ В ожидании Кеши... |
02.01.2020, 14:44 | #6 |
gamer
Участник клуба
Регистрация: 09.05.2015
Сообщений: 1,529
|
Состояние правил форматного вывода в поток определяется состоянием флагов форматирования потока. В заголовочном файле iostream.h определено следующее перечисление, задающее флаги форматирования:
enum { ... left = 0x0002 - выравнивание по левому краю ... uppercase = 0x0200 - выдача в формате xx.xxxx Exx ... } Изменить состояние флагов можно функцией: long setf (long flags);
мой канал на Ютубе: youtube.com/@games-zz3ju/videos/
мой канал на Рутубе: rutube.ru/channel/31423139/videos/ В ожидании Кеши... |
02.01.2020, 14:49 | #7 |
gamer
Участник клуба
Регистрация: 09.05.2015
Сообщений: 1,529
|
Для управления форматом выдачи из потока можно использовать специальные функции, называемые манипуляторами. Стандартными манипуляторами, доступ к которым можно получить, подключив файл iomanip.h, являются:
decl - десятичный формат ... setw (int w) - установить ширину поля выдачи Можно создать свою собственную функцию-манипулятор. Для организации обмена с файлами к программе надо подключить файл fstream.h.
мой канал на Ютубе: youtube.com/@games-zz3ju/videos/
мой канал на Рутубе: rutube.ru/channel/31423139/videos/ В ожидании Кеши... |
02.01.2020, 17:01 | #8 |
Форумчанин
Регистрация: 13.09.2019
Сообщений: 119
|
Спасибо, изучу
Да, еще забыл написать, что там, где несколько цифр подряд, это вывод массива. В оригинале прямо в операторе вывода, например: Код:
|
02.01.2020, 20:49 | #9 |
Форумчанин
Регистрация: 13.09.2019
Сообщений: 119
|
Стал делать через поток. Получается хитро на вид, но вроде почти работает. Например:
Код:
|
03.01.2020, 03:19 | #10 |
Форумчанин
Регистрация: 13.09.2019
Сообщений: 119
|
Всем спасибо, вопрос решен Конечно, в С++ оно подлиннее выглядит, но в конце концов удалось все это воспроизвести
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
аналог String.Format/sprintf | Пепел Феникса | JavaScript, Ajax | 1 | 14.06.2011 09:51 |
zip format | Jelena | Помощь студентам | 2 | 04.01.2009 18:26 |
Format() | eda | Microsoft Office Excel | 6 | 28.08.2008 11:21 |
Format | malevich | Общие вопросы Delphi | 5 | 31.12.2006 00:37 |