Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/29: Рейтинг темы: голосов - 29, средняя оценка - 4.93
Маэстро
Вирусоборец
 Аватар для Maestro
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798

Вывод нулей перед числом в приложениях GUI WIN32

23.10.2009, 12:43. Показов 6307. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет всем. Я немного запутался, нужна помощь. Вопрос такой:
Есть несколько тысяч файлов с одинаковыми именами "Template####.txt", где #### - это номер, от 0000, 0001, ..., 0099, 0100, ..., 9999. Ведущие нули обязательны. Нужен простой алгоритм\цикл, который позволит подставлять значение вместо ####. Например так:
C++
1
2
3
4
5
6
7
...
String size = 10000; // Строку привожу к целому, нужна для связки имени файла с числом
 
for(int count = 0; count < size.ToInt(); count++){
   Memo1->Lines->Add(String("Template")+count+".txt");
}
...
Но так будет неправильно
Code
1
2
3
4
5
6
7
Template0.txt
Template1.txt
...
Template99.txt
Template100.txt
...
Template9999.txt
С консольным вариантом делать умею.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <iomanip>
using namespace std;
 
int main()
{
   int z, size = 100;
 
   cout.setf(ios::right, ios::adjustfield);
   cout.fill('0');
   for(int i = 0; i < size; i++){
      cout<<setw(3)<<dec<<i<<endl;
   }
 
   cin>>z;
 
    return 0;
}
Но не могу правильно прикрутить этот вариант для графической программы...
1. Нужно каким-то образом задать ширину поля для номера.
2. Задать символ-заполнитель (в данном случае ноль), для отсутствующих разрядов.

Подскажете?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.10.2009, 12:43
Ответы с готовыми решениями:

Кириллица в WIN32 GUI приложениях
Всем привет. :) Снова опять к вам, вопрос у меня давний и наболевший, моими силами не решаемый. :( Ребята, буду благодарен и признателен....

Добавление нулей перед числом
Здравствуйте! Подскажите пожалуйста, есть ли функция, которая добавляет нули перед числом, если количество цифр в этом числе меньше...

Win32 GUI настроить вывод
Здравствуйте, не как не могу настроить вывод в GUI приложении cout и printf нечего не выводят, работаю в dev cpp, нажимаю отладка в окне...

10
 Аватар для Otaka
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
23.10.2009, 18:20
Точно не помню, но как-то так:
C++
1
2
String s;
s.sprintf("%04d",i);
или так
C++
1
2
String s;
s.sprintf("%40d",i);
Не помню, надо будет уточнить.
0
Маэстро
Вирусоборец
 Аватар для Maestro
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
23.10.2009, 20:44  [ТС]
Otaka, А как твой код прикрутить к именам файлов?
0
 Аватар для Otaka
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
23.10.2009, 20:51
Смотри пример:
C++
1
2
3
4
5
6
for(int i=0;i<20;i++)
        {
        String s;
        s.sprintf("template%04d.txt",i);
        ListBox1->AddItem(s,NULL);
        }
1
Маэстро
Вирусоборец
 Аватар для Maestro
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
24.10.2009, 11:35  [ТС]
Otaka, Спасибо, то что надо. Вчера что-то не получалось с Memo, но сегодня с утра на свежую голову всё получилось. Так же придумал, используя твою идею, как сохранять файлы с номером индекса из списка ComboBox
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// Проверка вывода имён в формате 'template####.txt'--------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   for(int i = 0; i < 20; i++){
      String s;
      s.sprintf("Template%04d.txt",i);
      Memo1->Lines->Add(s);
      ListBox1->AddItem(s, NULL);
     }
}
// Сохранение файла с индексом равным позиции в ComboBox'e--------------------
void __fastcall TForm1::ComboBox1Select(TObject *Sender)
{
   String s;
//   s.sprintf("Template%04d.txt", ComboBox1->ItemIndex);
   Memo1->Lines->SaveToFile(s.sprintf("Template%04d.txt", ComboBox1->ItemIndex));
}
//---------------------------------------------------------------------------
Вопрос успешно решён.
0
Маэстро
Вирусоборец
 Аватар для Maestro
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
25.10.2009, 16:29  [ТС]
Otaka, Привет. Помоги ещё разок. Я по быстрому протестировал на C++ Builder 6.0, там да, всё без проблем. Но я разрабатываю приложение в C++ Builder 2010. Вот тут у меня ничего не получается. sprintf - принимает char *, а в C++ Builder 2010 нужен wchar_t *. В гугле искал информацию, нашёл на вики - printf — Википедия и смотрел тут - справке msdn. Потом нашёл, что можно использовать wsprintf и в общем запутался в поисках и решении. #include <stdio.h> - подключен. Как переделать текущий вариант для билдера 2010?
0
 Аватар для Otaka
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
25.10.2009, 16:38
Может так?
C++
1
2
String s;
s.sprintf(L"Template%04d.txt",i);
Все себе собираюсь 2010 поставить, но как-то руки не доходят, поэтому как должно быть не знаю.
Ты, кстати, можешь конкретно писать AnsiString, и будет все по старому(я надеюсь).
1
Маэстро
Вирусоборец
 Аватар для Maestro
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
25.10.2009, 17:12  [ТС]
Цитата Сообщение от Otaka Посмотреть сообщение
Ты, кстати, можешь конкретно писать AnsiString
Да. Всё правильно. Затупил малость. Уже опробовал так. )))) Ты чуть-чуть опередил.
Цитата Сообщение от Otaka Посмотреть сообщение
будет все по старому(я надеюсь).
Всё в порядке. Меня зациклило на String'ах
C++
1
2
3
4
5
6
...
for(int i = 0; i < 20; i++){
   AnsiString s;
   s.sprintf("Template%04d.txt", i);
   Memo1->Lines->Add(s);
...
Вопрос решён на 100% Спасибо Otaka.
0
Маэстро
Вирусоборец
 Аватар для Maestro
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
25.10.2009, 20:39  [ТС]
Цитата Сообщение от Maestrino Посмотреть сообщение
C++ Builder 2010
Соврал. C++ Builder 2009, но сути уже не играет. Всё работает.
0
Маэстро
Вирусоборец
 Аватар для Maestro
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
31.10.2009, 17:11  [ТС]
Ещё придумал такой код для вывода ведущих нулей. Пример кода, сначала выводит "Template####.txt" для примера в Memo, а потом сохраняет файлы с именами, в которых перед последним числом присутствуют ведущие нули.
C++
1
2
3
4
5
6
7
8
9
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   for(int i = 0; i <= 20; i++){
     Memo1->Lines->Add(FormatFloat("Template0###", i)+".txt");
     Memo1->Lines->SaveToFile(FormatFloat("Template0###", i)+".txt");
    }
}
//---------------------------------------------------------------------------
0
 Аватар для Otaka
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
31.10.2009, 17:17
Тоже вариант.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
31.10.2009, 17:17
Помогаю со студенческими работами здесь

Вывод нулей перед запятой
Дано число 1100,11 Нужно чтобы вывело 001100,11 Как это реализовать? ПОМОГИТЕ

Вывод знака + перед числом
Привет! подскажите как мне решить такую проблему есть переменная $temperatura она возврацает температуру например 12°C ...

Графика в консольных приложениях WIN32
Всем привет))) Может тупой вопрос но оч надо узнать, как работать с простой графикой на новых версиях VC++. Я знаю что нужен graphic.h. Но...

Не выводится консоль в Win32 приложениях
собственно такая проблема. когда запускаешь проект в visual studio 2010 (любой, даже только что созданый, т.е. пустой) не выводится консоль...

Использование графических ресурсов в приложениях Win32
Помогите исправить ошибку:error C2664: LoadCursorW: невозможно преобразовать параметр 2 из &quot;int&quot; в &quot;LPCWSTR&quot; 1&gt; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! в-строка - входное арифметическое выражение в инфиксной(обычной). . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru