powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Число вида +123123 сформатировать в 1231,23. Дату 20210124 в 24.01.2021
21 сообщений из 21, страница 1 из 1
Число вида +123123 сформатировать в 1231,23. Дату 20210124 в 24.01.2021
    #40057054
hlopotun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем добрый вечер,

возможно ли такое стандартными функциями форматирования если изначально известно количество знаков после запятой или расположение разделителей в дате. Но ни те ни другие там не стоят. Понятно что можно иx туда программно вставить и потом форматировать. Интересна возможность сделать полное переформатирование не имея разделителей в исходном тексте стандартными функциями delphi. И как бы выглядела тогда их строка формата.

Спасибо за советы.
...
Рейтинг: 0 / 0
Число вида +123123 сформатировать в 1231,23. Дату 20210124 в 24.01.2021
    #40057065
Фотография Relic Hunter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hlopotun,

Такая функция существует и называется SubString.
...
Рейтинг: 0 / 0
Число вида +123123 сформатировать в 1231,23. Дату 20210124 в 24.01.2021
    #40057066
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hlopotun,

может регулярки помогут?
...
Рейтинг: 0 / 0
Число вида +123123 сформатировать в 1231,23. Дату 20210124 в 24.01.2021
    #40057068
hlopotun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
makhaon
hlopotun,

может регулярки помогут?


помогут, думал может есть что попроще.
С регулярками каждый раз как в первый класс.
...
Рейтинг: 0 / 0
Число вида +123123 сформатировать в 1231,23. Дату 20210124 в 24.01.2021
    #40057143
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: pascal
1.
2.
3.
4.
5.
6.
7.
StrToInt('+123123') / 100;
Str := '20210124';
EncodeDate(
  StrToInt(Copy(Str, 1, 4)),
  StrToInt(Copy(Str, 5, 2)),
  StrToInt(Copy(Str, 7, 2))
)
...
Рейтинг: 0 / 0
Число вида +123123 сформатировать в 1231,23. Дату 20210124 в 24.01.2021
    #40057144
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hlopotun,

у вас на входе - число (какого типа) или строка?
...
Рейтинг: 0 / 0
Число вида +123123 сформатировать в 1231,23. Дату 20210124 в 24.01.2021
    #40057402
hlopotun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andreymx,

на входе строки.

Это попытка универсально описать процесс конвертации входящих данных при их сохранении в базе.
Типа пользователь указывает какое поле в какое поле сохранять и как его при этом конвертировать.
Конечно с регулярками самое правильное решение но заставлять конечного пользователя с ними разбираться будет неправильно.
Какая конвертация понадобится заранее неизвестно. Поэтому, скорее всего прийдётся изобретать велосипед с масками вида:
+*AB -> *,AB
ABCDEFGH -> GH.EF.ABCD
где каждый символ в маске исходной имеет такой же символ в маске целевой и на основе его позиции делать перестановку.
Нужно что то с чем конечный пользователь способен разобраться. Большой сложности при конвертации не ожидается, простая перестановка местами и вставка разделителей в нужных местах. Регулярки тут явно всё усложнят. Народ не поймёт (c)
...
Рейтинг: 0 / 0
Число вида +123123 сформатировать в 1231,23. Дату 20210124 в 24.01.2021
    #40057403
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hlopotun,

Стандартный вопрос
03.02.11 - это какая дата?
...
Рейтинг: 0 / 0
Число вида +123123 сформатировать в 1231,23. Дату 20210124 в 24.01.2021
    #40057405
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hlopotunНарод не поймёт (c)

Делай как в Ёкселе: "эта хрень - число, а эта - дата", дальше сам разберёшься.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Число вида +123123 сформатировать в 1231,23. Дату 20210124 в 24.01.2021
    #40057407
hlopotun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andreymx
hlopotun,

Стандартный вопрос
03.02.11 - это какая дата?


подразумевается что конечный пользователь знает какая.
...
Рейтинг: 0 / 0
Число вида +123123 сформатировать в 1231,23. Дату 20210124 в 24.01.2021
    #40057417
Фотография Dmitry Arefiev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hlopotun
помогут, думал может есть что попроще.
С регулярками каждый раз как в первый класс.

Была бы sscanf ...
...
Рейтинг: 0 / 0
Число вида +123123 сформатировать в 1231,23. Дату 20210124 в 24.01.2021
    #40057537
Cobalt747
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hlopotun
andreymx
hlopotun,

Стандартный вопрос
03.02.11 - это какая дата?


подразумевается что конечный пользователь знает какая.

Тогда храните как есть, раз уж ПО не должно знать формат.
...
Рейтинг: 0 / 0
Число вида +123123 сформатировать в 1231,23. Дату 20210124 в 24.01.2021
    #40057538
Фотография JayDi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StrToDateTime
StrToFloat

Оба метода принимают FormatSettings. Создаем копию настроек через FormatSettings.Create, после чего настраиваем формат даты и плавающей точки (единственное, надо пробелы убрать из суммы, если будут).

А дальше через try ... except on e: exception ... end;

Код: pascal
1.
2.
3.
4.
5.
  settings = TFormatSettings.Create;
  settings.ThousandSeparator := ' '; // бесполезен, надо вручную удалять пробелы
  settings.DecimalSeparator := ',';
  settings.DateSeparator := '.';
  settings.ShortDateFormat := 'yyyy/MM/dd';
...
Рейтинг: 0 / 0
Число вида +123123 сформатировать в 1231,23. Дату 20210124 в 24.01.2021
    #40057539
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JayDiА дальше через try ... except on e: exception ... end;

Ну-ну, удачи тебе с различением yy/mm/dd, dd/mm/yy и mm/dd/yy через исключения.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Число вида +123123 сформатировать в 1231,23. Дату 20210124 в 24.01.2021
    #40057542
Фотография JayDi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

Ну-ну, удачи тебе с различением yy/mm/dd, dd/mm/yy и mm/dd/yy через исключения.

Догадками занимается делфи. А исключение -- это ошибка, т.е. дальше мы ничего не должны обрабатывать или пытаться угадать, а тупо должны сообщить пользователю, что он неверно указал формат данных. Вроде именно в этом и была первоначальная задача.
...
Рейтинг: 0 / 0
Число вида +123123 сформатировать в 1231,23. Дату 20210124 в 24.01.2021
    #40057585
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JayDi

Код: pascal
1.
  settings.ThousandSeparator := ' '; // бесполезен, надо вручную удалять пробелы


Если что - там может быть не пробел, а символ похожий на пробел, но с другим кодом.
Код не помню.
Сам накалывался на это.
...
Рейтинг: 0 / 0
Число вида +123123 сформатировать в 1231,23. Дату 20210124 в 24.01.2021
    #40057595
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fraks
JayDi

Код: pascal
1.
  settings.ThousandSeparator := ' '; // бесполезен, надо вручную удалять пробелы



Если что - там может быть не пробел, а символ похожий на пробел, но с другим кодом.
Код не помню.
Сам накалывался на это.
неразрывный пробел
Код 160
...
Рейтинг: 0 / 0
Число вида +123123 сформатировать в 1231,23. Дату 20210124 в 24.01.2021
    #40057598
Фотография JayDi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fraks

Если что - там может быть не пробел, а символ похожий на пробел, но с другим кодом.
Код не помню.

Нет, это именно функция StrToFloat игнорирует знак валюты и тысячный разделитель, выдавая исключение.
...
Рейтинг: 0 / 0
Число вида +123123 сформатировать в 1231,23. Дату 20210124 в 24.01.2021
    #40057616
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И это логично, поскольку она для вещественных чисел и использует форматы вещественных
чисел, а не денег, у которых совсем другие форматы. Они даже задаются на разных вкладках
региональных настроек.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Число вида +123123 сформатировать в 1231,23. Дату 20210124 в 24.01.2021
    #40057712
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уже страницу понаписали, а так и не понятно, с чего вдруг такой кривой ввод, без разделителей.
По сабжу: задавать маски. Т.е. юзер должен подсказать программе формат, что-то типа такого

Формат входных данных (N - цифры целой части, M - цифры дробной): [-NNNNMM]
Пример: [+123456]
Результат: [+1234,56]

Ну и пресеты, MRU и прочие вспомогатели, чтоб каждый раз не вбивать. Превьюшка результата очень желательно, чтобы не кидать в юзера ошибками после начала импорта
...
Рейтинг: 0 / 0
Число вида +123123 сформатировать в 1231,23. Дату 20210124 в 24.01.2021
    #40059042
Фотография ну я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hlopotun
andreymx,

на входе строки.

Это попытка универсально описать процесс конвертации входящих данных при их сохранении в базе.
Типа пользователь указывает какое поле в какое поле сохранять и как его при этом конвертировать.
Конечно с регулярками самое правильное решение но заставлять конечного пользователя с ними разбираться будет неправильно.
Какая конвертация понадобится заранее неизвестно. Поэтому, скорее всего прийдётся изобретать велосипед с масками вида:
+*AB -> *,AB
ABCDEFGH -> GH.EF.ABCD
где каждый символ в маске исходной имеет такой же символ в маске целевой и на основе его позиции делать перестановку.
Нужно что то с чем конечный пользователь способен разобраться. Большой сложности при конвертации не ожидается, простая перестановка местами и вставка разделителей в нужных местах. Регулярки тут явно всё усложнят. Народ не поймёт (c)


В М системах такая функция называется $translate(source,from,to)
Функция заменяет в исходной строке символы указанные во втором параметре на символы из третьего параметра в той же позиции. Если в третьем параметре нет такой позиции то заменяет на пустую строку.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
function translate(Source: string; pFrom: PChar; pTo: PChar): string;
begin
  Result := Source;
  while(pFrom^ <> #0) do
  begin
    if pTo^ <> #0 then
      Result := StringReplace(Result, pFrom^, pTo^, [rfReplaceAll])
    else
      Result := StringReplace(Result, pFrom^, '', [rfReplaceAll]);
    Inc(pFrom);
    if pTo^ <> #0 then
      Inc(pTo);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  sFrom: String;
  sTo: String;
  sSource: String;
begin
  sFrom := edtFrom.Text; // YyUuMmDd
  sTo := edtTo.Text; // 20210124
  sSource := edtSource.Text;  // Dd.Mm.YyUu
  edtResult.Text :=
    translate(edtSource.Text, PChar(sFrom), PChar(sTo)); // 24.01.2021
end;



В вашем случае задаются маски для From и Source.
А на что заменять - это символы из исходной строки To.
В вашем случае нужен как-бы replace наоборот - исходная строка 20210124 задает на что нужно заменить, Source задает формат с разделителями
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Число вида +123123 сформатировать в 1231,23. Дату 20210124 в 24.01.2021
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]