Что нового

[Данные, строки] Как в длинном строке через каждый n-ный символ вставить пробел?

akmal18

Новичок
Сообщения
11
Репутация
0
Здравствуйте!
Имеется очень длинная строка с разными символами. Как разделить их, скажем, по две символы и через каждый второй символ вставить пробел?
Например, имеется:
dt45r21n4j87k52df1a321e45f4v34v78x.........
Надо что бы было вот так:
dt 45 r2 1n 4j 87 k5 2d f1 a3 21 e4 5f 4v 34 v7 8x.........
Конечно, это можно сделать в цыкле, но это занимает очень много времени.
Можно ли это сделать с помощью RegExp?
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Код:
$sText = 'Yukbc878By7iobtBNHklnkdkgTFCFgjvb'

$sOut = ''

For $i = 1 To StringLen($sText) Step 2
	If $i < StringLen($sText) Then
	    $sOut &= StringMid($sText, $i, 2) & " "
	Else
		$sOut &= StringMid($sText, $i, 2)
	EndIf
Next

MsgBox(0, '', $sOut)
 

WSWR

AutoIT Гуру
Сообщения
941
Репутация
363
akmal18

Код:
#include <Array.au3>

$sTring = 'dt45r21n4j87k52df1a321e45f4v34v78x'
$aTemp = StringRegExp($sTring, '(.{2})', 3)
$sTring = _ArrayToString($aTemp, ' ')
ConsoleWrite($sTring & @LF)


или даже так:
Код:
$sTring = 'dt45r21n4j87k52df1a321e45f4v34v78x'
$sTring = StringRegExpReplace($sTring, '(.{2})', '$1 ')
ConsoleWrite($sTring & @LF)
 
Автор
A

akmal18

Новичок
Сообщения
11
Репутация
0
Viktor1703
Спасибо, за ответ. Но как я писал в первом сообщении, при очень длинном строке (миллион символов и больше) такие цыклы не очень-то быстрые. :(
Хотелось бы решение с помощью RegExp, так как думаю они будут работать очень быстро в подобных задачах.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
akmal18,
Код:
$hFile = FileOpen(@AutoItExe, 16)
$sText = Hex(FileRead($hFile))
FileClose($hFile)
ConsoleWrite(StringLen($sText) & @LF)
$iStart = TimerInit()
$sText = StringTrimRight(StringRegExpReplace($sText, '(.{2})', '$1 '), 1)
ConsoleWrite(TimerDiff($iStart) & @LF)
FileWrite(@ScriptDir & '\hex.txt', $sText)

при очень длинном строке (миллион символов и больше) такие цыклы не очень-то быстрые.
sad.gif

Хотелось бы решение с помощью RegExp, так как думаю они будут работать очень быстро в подобных задачах.
Скорей всего нет.
 
Автор
A

akmal18

Новичок
Сообщения
11
Репутация
0
WSWR
Спасибо! :ok:
Второй вариант больше понравился, из за компактности. :smile:
Думаю с большими строками тоже скорость будет отличным. :IL_AutoIt_1:


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

madmasles
Спасибо за отличный пример! Но думаю 3700-4000 мс для 1,5 миллионов символов это приемлемая скорость. В циклах, по-моему, это займет гораздо больше времени.
 
Верх