Войти

Показать полную графическую версию : [решено] Разделение строки через n символ


ivan.vas
14-10-2021, 11:28
Добрый день.
Подскажите, возможно ли такое сделать на Powershell.
Есть текстовый файл с текстом разделенным (можно либо запятой либо точкой с запятой):
a;b;c;d;e;f;g;a;b;c;d;e;f;g
Возможно ли, пройтись по этой строке, найти разделить номер 4 и сделать новую строку, к примеру вот так:

a;b;c;d;
e;f;g;a;
b;c;d;e;
f;g;a;b;

alpap
14-10-2021, 13:06
если строка полноценная в смысле форматирования, то можно так:

$line = 'a;b;c;d;e;f;g;a;b;c;d;e;f;g;a;b;'
[regex]::Matches($line,'([^;];){4}').Value

иначе надо понимать какой формат будет (бывает, может быть) у строки - делится ли она нацело на 4, имеет знак ";" в конце строки, чтобы понимать учитывать это или дописывать в строку (менять ее или нет) или делать расчеты предварительные.

ivan.vas
14-10-2021, 14:53
иначе надо понимать какой формат будет »
получается если строка имеет спецсимволы + отдельные знаки препинания, то нужно это тоже учитывать?

Fors1k
14-10-2021, 16:36
строка имеет спецсимволы + отдельные знаки препинания »
Приведите пример.

ivan.vas
14-10-2021, 17:00
Приведите пример. »
Пример вот такой:
111.44.77.99;qwe@wqe.wqe;123!@#$1*{];11.777.999.05;qwe-23@wqe@aa.ff;!Q@W#Er$t%Y^;

Разделение - ;

Fors1k
14-10-2021, 17:18
ivan.vas, тут 6 кусков. В таком случае должно быть 4 и 2 ?
Добавил немного универсальности к варианту alpap:
cls
$delimiter = ";"
$line = '111.44.77.99;qwe@wqe.wqe;123!@#$1*{];11.777.999.05;qwe-23@wqe@aa.ff;!Q@W#Er$t%Y^;'

[regex]::Matches($line, "([^\$delimiter]+\$delimiter`?){1,4}").Value

ivan.vas
14-10-2021, 17:34
тут 6 кусков. »
Отвлекли, когда пример печатал. :(

Спасибо!

alpap
14-10-2021, 17:41
если брать приведенную вначале строку и не учитывать ничего, то можно так (получим то что получим)

$line = 'a;b;c;d;e;f;g;a;b;c;d;e;f;g'
$line -Replace '([^;];){4}', "$&`r`n"

YuS_2
14-10-2021, 22:30
Пример вот такой:
111.44.77.99;qwe@wqe.wqe;123!@#$1*{];11.777.999.05;qwe-23@wqe@aa.ff;!Q@W#Er$t%Y^;
Разделение - ; »
$str = '111.44.77.99;qwe@wqe.wqe;123!@#$1*{];11.777.999.05;qwe-23@wqe@aa.ff;!Q@W#Er$t%Y^;'
$cnt=1;$str -split {if($_ -eq ";"){$global:cnt++%3 -eq 0}}
- делить строку будет по каждому третьему ";"




© OSzone.net 2001-2012