Что нового

[Данные, строки] Как добавить/удалить символы в строке

Atall

Новичок
Сообщения
27
Репутация
0
Всем привет!

Господа снова нужна ваша помощь!

есть строка: 1234-1234-12345-1234

как можно ее преобразить вот в такую: 1234-1234-00012345-4
 

XpycT

Скриптер
Сообщения
380
Репутация
133
Atall
Можно так
Код:
#Region Includes
#EndRegion Includes
#NoTrayIcon

$sStringOld = "1234-1234-12345-1234"

$aStringSplit = StringSplit($sStringOld, "-")

Dim $sStringNew = ""
For $s = 1 To 2
	$sStringNew &= $aStringSplit[$s] & "-"
Next

$sStringNew &= "000" & $aStringSplit[3] & "-4"

MsgBox(0, "", "$sStringOld = " & $sStringOld & @CRLF & "$sStringNew = " & $sStringNew)
 
Автор
A

Atall

Новичок
Сообщения
27
Репутация
0
А может попроще возможно?
 

axlwor

Скриптер
Сообщения
657
Репутация
147
:laugh:
можно
Код:
;было
$sOne = '1234-1234-12345-1234'
;стало
$sOne = '1234-1234-00012345-4'
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Atall [?]
Код:
$sString = "1234-1234-12345-1234"

$sRet = StringRegExpReplace($sString, "(12345)-123(4)", "000\1-\2")
ConsoleWrite($sRet & @LF)

Но т.к небыло предоставлено никаких условий, этот метод может провалиться при любом мелком изменений исходной строки.
 
Автор
A

Atall

Новичок
Сообщения
27
Репутация
0
CreatoR сказал(а):
Atall [?]
Но т.к небыло предоставлено никаких условий, этот метод может провалиться при любом мелком изменений исходной строки.

Да наверное условия нужно было прописать...

Есть файл с большим количеством таких вот номеров.
Количество разделителей "-" всегда одинаково.
Количество знаков между разделителями может варьироваться.
Известно только что между разделителями цифры.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Atall [?]
Количество знаков между разделителями может варьироваться.
Т.е там может быть и 14235, и 123? как тогда определять где нужно подставлять 000?
 
Автор
A

Atall

Новичок
Сообщения
27
Репутация
0
CreatoR сказал(а):
Atall [?]
Количество знаков между разделителями может варьироваться.
Т.е там может быть и 14235, и 123? как тогда определять где нужно подставлять 000?

Похоже я сбил с толку... извиняюсь

вот жесткий формат: (4 знака)-(4 знака)-(от 5 до 7 знаков)-(от 1 до 4 знаков)

а 000 нужно поставить после второго разделителя
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Atall
Может так:
Код:
$sRet = StringRegExpReplace($sString, "(\d{5,7})-.*?(\d)$", "000\1-\2")
ConsoleWrite($sRet & @LF)
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Atall [?]
вот жесткий формат:
Хорошо, значит нули нужно добавлять у третьего набора знаков, а у четвёртого набора убирать все цифры кроме последней, я верно понял?

Тогда вот:
Код:
$sString = "1234-1234-12345-1234"

$sRet = StringRegExpReplace($sString, "\b(\d{4}-\d{4}-)(\d{5,7}-)\d?\d?\d?(\d)\b", "${1}000$2$3")
ConsoleWrite($sRet & @LF)
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Atall [?]
Да в общем подходит!
Если учитывать условия, то следующая строка уже не выдаст нужный результат:
Код:
$sString = "1234-12345-12345-124"

съедается одна группа чисел.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
CreatoR
Ваша строка
Код:
$sString = "1234-12345-12345-124"
не подходит под
Atall [?]
жесткий формат: (4 знака)-(4 знака)-(от 5 до 7 знаков)-(от 1 до 4 знаков)
:smile:
 
Автор
A

Atall

Новичок
Сообщения
27
Репутация
0
CreatoR [?]
Хорошо, значит нули нужно добавлять у третьего набора знаков, а у четвёртого набора убирать все цифры кроме последней, я верно понял?
На самом деле условие посложнее будет, но так как я хотел сам додуматься то сразу его не написал. Но если поможете будет здорово :smile:

суть в том что в файле может повторяться один и тот же номер, но с разным количеством нулей после третьего и четвертого разделителей
например: 1234-1234-12345-0004
и его аналог но уже в другом формате: 1234-1234-0012345-4

задача отследить оба.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
madmasles [?]
Ваша строка
не подходит
Ну в моём примере по крайней мере ничего не обрезается, я к тому и клонил, что если не подходит под формат, то не должно ничего заменять.

Atall [?]
задача отследить оба.
Мой пример это и делает, он добавлят нули к 0012345 (во втором случае), если нужно удалять нули, то это ещё одно условие.

Код:
;$sString = "1234-1234-12345-0004"
$sString = "1234-1234-0012345-4"

$sRet = StringRegExpReplace($sString, "\b(\d{4}-\d{4}-)0*(\d{5,7}-)\d?\d?\d?(\d)\b", "${1}000$2$3")
ConsoleWrite($sRet & @LF)
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
CreatoR,
А нельзя заменить
Код:
\d?\d?\d?
на
Код:
\d{0,3}
 
Автор
A

Atall

Новичок
Сообщения
27
Репутация
0
Всем большое спасибо! :IL_AutoIt_1:

узнал много полезного

тема решена.
 
Верх