Что нового

Как разделить строку?

Centrinar

Новичок
Сообщения
100
Репутация
1
Есть строчка типа: C:\Program Files\7-Zip(Тут пробел)C:\Program Files\WinRAR
Как получить отдельные значения т.е. пр.
text1 = C:\Program Files\7-Zip
text2 = C:\Program Files\WinRAR
Спасибо! :IL_AutoIt_1:
 

Zaramot

I ♥ AutoIt
Сообщения
1 160
Репутация
658
Код:
$STRING = 'C:\Program Files\7-Zip C:\Program Files\WinRAR'
$SPLIT = StringSplit($STRING, ' ')
MsgBox(0, 'Как разделить строку', 'text1 = ' & $SPLIT[1] & $SPLIT[2] & @CRLF & 'text2 = ' & $SPLIT[3] & $SPLIT[4])
 

Zaramot

I ♥ AutoIt
Сообщения
1 160
Репутация
658
AZJIO, чё уже так не написал ?:
Код:
$sTest='C:\Program Files\7-Zip C:\Program Files\WinRAR'
$aTest=StringRegExp($sTest, '^(.*) (.:.*)$', 3)
MsgBox(0, '', 'text1 = ' & $aTest[0] & @CRLF & 'text2 = ' & $aTest[1])
 

Zaramot

I ♥ AutoIt
Сообщения
1 160
Репутация
658
OffTopic:
Использовать StringRegExp для разделение строк лучше чем использовать StringSplit, хотя StringRegExp тяжело мне дается :smile:
 

Garrett

Модератор
Локальный модератор
Сообщения
3 999
Репутация
964
OffTopic:
Zaramot [?]
Использовать StringRegExp для разделение строк лучше чем использовать StringSplit
Всё зависит от конкретного случая.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
AZJIO,
В Вашем варианте, если в строке больше двух путей, то возвращает только первый и последний. :(
 

CreatoR

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

В конкретно поставленной задаче в этой теме, есть корневая проблема - пробел может содержаться и в пути к файлу, поэтому только пробел в качестве разделителя не подходит.

Я бы решил это так:

Код:
$sTest = 'C:\Program Files\7-Zip C:\Program Files\WinRAR'
$aTest = StringRegExpReplace($sTest, '(?i)^([a-z]:.*?) ([a-z]:.*?)(?: [a-z]:.*|$)', 'text1 = $1' & @CRLF & 'text2 = $2')
ConsoleWrite($aTest & @CRLF)
 

AZJIO

Меценат
Меценат
Сообщения
2 752
Репутация
1 149
madmasles
Сделал в одну строку

Код:
#include <Array.au3>
$sTest='C:\Program Files\7-Zip D:\Program Files\WinRAR Z:\Program Files\WinUha X:\Program Files\Cabman2003 K:\Program Files\UniExtract'
$aTest=StringRegExp($sTest&'C:', '(?i)([a-z]:.+?)(?=[a-z]:)', 3)
_ArrayDisplay($aTest, 'aTest')


CreatoR
можно придерживаться поставленной задачи
Согласен, иногда даже нужно, чтоб отсеять не соответствующие запросу проверкой @error.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
CreatoR [?]
иногда это пустая трата времени, можно придерживаться поставленной задачи, если конечно автор не поставил её так чтобы нужно было всё предусмотреть.
Всего, конечно, не предусмотреть, но я предположил, что в строке может быть более двух путей, и AZJIO предложил оригинальное и рабочее решение. :smile:
 
Верх