Что нового

[Данные, строки] как заменить запятые на точки в строке?

xlgrgrc

Знающий
Сообщения
91
Репутация
7
Доброго времени суток.
Имеется такой текст с буфере обмена

Код:
1,St     ,  59,021536 , 28,800114 ,37861.77282,  0, 1, 3,         0,     65535,           ,0, 0,    0,   -777,   8, 0,17
2,Aka     ,  59,971073 , 28,100791 ,37861.77282,  0, 1, 3,         0,     65535,           ,0, 0,    0,   -777,   8, 0,17
3,Bno     ,  59,978543 , 28,195183 ,37861.77282,  0, 1, 3,         0,     65535,           ,0, 0,    0,   -777,   8, 0,17
4,Boyy     ,  59,940212 , 28,222908 ,37861.77282,  0, 1, 3,         0,     65535,           ,0, 0,    0,   -777,   8, 0,17

Нужно привести к такому виду

Код:
1,St     ,  59.021536 , 28.800114 ,37861.77282,  0, 1, 3,         0,     65535,           ,0, 0,    0,   -777,   8, 0,17
2,Aka     ,  59.971073 , 28.100791 ,37861.77282,  0, 1, 3,         0,     65535,           ,0, 0,    0,   -777,   8, 0,17
3,Bno     ,  59.978543 , 28.195183 ,37861.77282,  0, 1, 3,         0,     65535,           ,0, 0,    0,   -777,   8, 0,17
4,Boyy     ,  59.940212 , 28.222908 ,37861.77282,  0, 1, 3,         0,     65535,           ,0, 0,    0,   -777,   8, 0,17

Изменились запятые на точки в 2 числах.
Но изменились не все запятые на точки а именно в этих двух числах.
Текст состоит из 200-300 таких же строчек. Второй столбик всегда разный по длинне символов.

По форуму шарился уже долго. Прошу помощи. Направления или совета. Буду благодарен всему :smile:

Сделал вот так:
Код:
$sText = '1,StRp9697     ,  59,821536 , 28,500114 ,37861.77282,  0, 1, 3,         0,     65535,           ,0, 0,    0,   -777,   8, 0,17'
$sText = StringReplace($sText, '  59,', '  59.')
$sText = StringReplace($sText, ', 28,', ', 28.')
MsgBox(0, '', $sText)


Но есть минус не всегда " 59," когда то бывает 57,58,59,60,61, Да и со вторым числом так же...
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
965
xlgrgrc [?]
Изменились запятые на точки в 2 числах.
Код:
$sText = ClipGet()
$sText = StringRegExpReplace($sText,'(\d+),(?=\d+)', '$1.')
ClipPut($sText)
ConsoleWrite(ClipGet() & @CR)
 
Автор
X

xlgrgrc

Знающий
Сообщения
91
Репутация
7
Так разбираюсь ))) Спасибо справке ) Сейчас осилю. Или спрошу )))

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


Добавлено:
Сообщение автоматически объединено:

Да за что я любил автоит что он просто в понимании. А сейчас что то удивил )

Код:
StringRegExpReplace($sText,'(\d+),(?=\d+)', '$1.')


И так
А. StringRegExpReplace - Заменяет текст строки, используя регулярное выражение. - понятно )
Б. $sText - текст в котором ищем - понятно.

В. '(\d+) - Так самое интересное )))
1. ' - не нашел объяснения.
2. (...) - начало и конец группы - это значит текст делиться на группы и обрабатывается частями. Как группы появляются по строчке или как не понятно.
3. \d - [0-9] - любая десятичная цифра - понятно, т.к ищем в моем примере в десятичных числах
4. + значит - повтор предыдущего символа или группы 1 и более раз. Опять же не понятно что такое группа.

Мда ))) В общем примерную суть понял но вопросов стало больше ))) И Интереснее )))
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
965
Просмотр вперёд.

(\d+),(?=\d+)

Ищем перед найденным числом (?=\d+) (один или более раз не включая его в найденное), символ запятая перед которым следует число (\d+) один или более раз, и захватываем его.
StringRegExpReplace вырезает найденный символ , и меняет его на захваченную группу с точкой в третьем параметре $1.
 

AZJIO

Меценат
Меценат
Сообщения
2,813
Репутация
1,170
xlgrgrc [?]
Опять же не понятно что такое группа.
На странице регулярных выражений жмешь Ctrl+F, вводишь "групп" и читаешь в местах где слово подсвечено, пытаясь найти описание и оно там есть.
 
Автор
X

xlgrgrc

Знающий
Сообщения
91
Репутация
7
Garrett [?] спасибо. Вчера долго еще сидел. Примерная картинка появилась ))) Буду знать что можно сделать )))
AZJIO да я эту страничку много раз прочитал ) Сегодня еще на свежую голову почитаю) Спасибо русской справке )))
 
Верх