<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; CMD/BAT: посимвольный перебор строки (сравнение скорости двух методов)]]></title>
		<link>http://forum.script-coding.com/viewtopic.php?id=18587</link>
		<atom:link href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=18587&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «CMD/BAT: посимвольный перебор строки (сравнение скорости двух методов)».]]></description>
		<lastBuildDate>Mon, 04 May 2026 16:38:40 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: CMD/BAT: посимвольный перебор строки (сравнение скорости двух методов)]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=163375#p163375</link>
			<description><![CDATA[<p><strong>Arigato</strong>Спасибо, я понял. Вопрос снят.</p>]]></description>
			<author><![CDATA[null@example.com (gudleifr)]]></author>
			<pubDate>Mon, 04 May 2026 16:38:40 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=163375#p163375</guid>
		</item>
		<item>
			<title><![CDATA[Re: CMD/BAT: посимвольный перебор строки (сравнение скорости двух методов)]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=163374#p163374</link>
			<description><![CDATA[<p>А зачем файл на строки разбивать? Надо конкретную задачу озвучить, от туда и инструмент решения подберется.</p><p>Ну и в данной теме не файл на строки разбивается, а строка на символы.</p>]]></description>
			<author><![CDATA[null@example.com (Arigato)]]></author>
			<pubDate>Mon, 04 May 2026 16:33:47 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=163374#p163374</guid>
		</item>
		<item>
			<title><![CDATA[Re: CMD/BAT: посимвольный перебор строки (сравнение скорости двух методов)]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=163373#p163373</link>
			<description><![CDATA[<div class="quotebox"><cite>Arigato пишет:</cite><blockquote><p>Не понял вопроса</p></blockquote></div><p>Ну, по жизни, Вам, наверняка, приходится разбивать файлы на строки. Чем Вы это ОБЫЧНО, ЧАЩЕ ВСЕГО, ПРЕДПОЧТИТЕЛЬНЕЕ делаете. Навскидку.</p><p>Типа, сегодня Вы едите черную икру, а вчера - ели красную. По разным причинам. Вопрос - какой икры Вы съели больше за последний год? Примерно.</p>]]></description>
			<author><![CDATA[null@example.com (gudleifr)]]></author>
			<pubDate>Mon, 04 May 2026 13:59:05 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=163373#p163373</guid>
		</item>
		<item>
			<title><![CDATA[Re: CMD/BAT: посимвольный перебор строки (сравнение скорости двух методов)]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=163372#p163372</link>
			<description><![CDATA[<p>Не понял вопроса. Если на CMD, то файл на строки разбивается через for:</p><div class="codebox"><pre><code>for /f &quot;usebackq delims= eol=&quot; %%L in (&quot;file.txt&quot;) do (
    echo %%L
)</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Arigato)]]></author>
			<pubDate>Mon, 04 May 2026 13:18:22 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=163372#p163372</guid>
		</item>
		<item>
			<title><![CDATA[Re: CMD/BAT: посимвольный перебор строки (сравнение скорости двух методов)]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=163371#p163371</link>
			<description><![CDATA[<p>Пардон, попутный вопрос: А чем Вы чаще всего разбиваете текстовые файлы на строки? Не в смысле, какие вообще есть варианты, а какие используете чаще всего Вы?</p><p>P.S. Если что, я в простых случаях руками делаю замену регулярных выражений в Notepad++, а в большинстве остальных - пишу &quot;анализатор&quot; на Perl под CygWin.</p>]]></description>
			<author><![CDATA[null@example.com (gudleifr)]]></author>
			<pubDate>Mon, 04 May 2026 09:59:44 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=163371#p163371</guid>
		</item>
		<item>
			<title><![CDATA[Re: CMD/BAT: посимвольный перебор строки (сравнение скорости двух методов)]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=163370#p163370</link>
			<description><![CDATA[<p>Можно и на C++. Но тема про CMD/BAT.</p>]]></description>
			<author><![CDATA[null@example.com (Arigato)]]></author>
			<pubDate>Mon, 04 May 2026 08:51:32 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=163370#p163370</guid>
		</item>
		<item>
			<title><![CDATA[Re: CMD/BAT: посимвольный перебор строки (сравнение скорости двух методов)]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=163369#p163369</link>
			<description><![CDATA[<p>А через PowerShell не проще?</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Sun, 03 May 2026 20:54:52 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=163369#p163369</guid>
		</item>
		<item>
			<title><![CDATA[CMD/BAT: посимвольный перебор строки (сравнение скорости двух методов)]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=163368#p163368</link>
			<description><![CDATA[<p>Посимвольный перебор строки можно сделать двумя способами:<br />1. Завести индекс, брать символ в позиции индекса, инкремировать, проверять на достижение конца строки, goto.<br />2. Перебирать индекс в for, брать символ в позиции индекса, проверять на достижение конца строки, goto.</p><p>Сравним оба варианта на скорость работы:</p><div class="codebox"><pre><code>@echo off
setlocal enabledelayedexpansion

:: Формируем строку из 8000 символов
set &quot;str=&quot;
for /l %%i in (1,1,8000) do set &quot;str=!str!A&quot;

:: ===== МЕТОД 1: Доступ по индексу =====
echo Method1:

:: Замер времени начала
call :gettick
set start=%errorlevel%

set idx=0
:loop1
    set &quot;ch=!str:~%idx%,1!&quot;
    if not defined ch goto end1
    rem Тут работа с символом в ch...
    set /a idx+=1
    goto loop1
:end1

:: Замер времени окончания
call :gettick
set end=%errorlevel%

set /a tm=(%end%-%start%)*10
if %tm% lss 0 set /a tm+=24*3600000

echo   Time: %tm% ms
echo.

:: ===== МЕТОД 2: Доступ через цикл for =====
echo Method2:

call :gettick
set start=%errorlevel%

:: 8192 - максимально возможная длина строки в CMD
for /l %%i in (0,1,8192) do (
    set &quot;ch=!str:~%%i,1!&quot;
    if not defined ch goto end2
    rem Тут работа с символом в ch...
)
:end2

call :gettick
set end=%errorlevel%

set /a tm=(%end%-%start%)*10
if %tm% lss 0 set /a tm+=24*3600000

echo   Time: %tm% ms
echo.

exit /b

:gettick
:: Количество сотых долей секунды, прошедших с начала дня
setlocal
set t=%time: =0%
set /a tick=1%t:~9,2%-100+(1%t:~6,2%-100)*100+(1%t:~3,2%-100)*6000+(1%t:~0,2%-100)*360000
endlocal &amp; exit /b %tick%</code></pre></div><p>Итог на моем компе:</p><div class="codebox"><pre><code>Method1:
  Time: 6240 ms

Method2:
  Time: 310 ms</code></pre></div><p>Метод с for быстрее аж в 20 раз!</p><p><strong>Вывод:</strong> для посимвольного перебора строки выгодно использовать цикл for. Так как заранее не знаем длину строки, то верхнюю границу берем по максимуму, а из цикла выходим по if и goto.</p><p>P.S. проверка на пустоту через</p><div class="codebox"><pre><code>if not defined ch goto end1</code></pre></div><p>немного быстрее проверки через</p><div class="codebox"><pre><code>if &quot;!ch!&quot;==&quot;&quot; goto end1</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Arigato)]]></author>
			<pubDate>Sat, 02 May 2026 13:50:42 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=163368#p163368</guid>
		</item>
	</channel>
</rss>
