help sorting list of filename by its string lenght
Moderator: DosItHelp
Re: help sorting list of filename by its string lenght
foxi,
a file.txt content i used is the same as of temp.tmp . and if it is no content - it give error.
then, i didnt ask you first of what inside the file.txt in your 3rd method and i decide myself thats content of file.txt is an input.
this is what i means that a red colored font is content is an input:
for /f "delims=" %%a in (' type "file.txt"') do call :next "%%a"
and another red colored font content below is also an input as the same as of above:
for /f "tokens=1,* delims=>" %%a in (' sort ^< temp.tmp ') do echo(%%b
its the same pattern as of my code with your second method and applying with your third method.
sorry, that is all i understand.
i could have have asked you first of what inside the file.txt?
a file.txt content i used is the same as of temp.tmp . and if it is no content - it give error.
then, i didnt ask you first of what inside the file.txt in your 3rd method and i decide myself thats content of file.txt is an input.
this is what i means that a red colored font is content is an input:
for /f "delims=" %%a in (' type "file.txt"') do call :next "%%a"
and another red colored font content below is also an input as the same as of above:
for /f "tokens=1,* delims=>" %%a in (' sort ^< temp.tmp ') do echo(%%b
its the same pattern as of my code with your second method and applying with your third method.
sorry, that is all i understand.
i could have have asked you first of what inside the file.txt?
Re: help sorting list of filename by its string lenght
bars143 wrote:i could have have asked you first of what inside the file.txt?
Yes, file.txt is the input file which I thought I mentioned. This is the content.
Code: Select all
http://www.divisioncore.com/
http://www.dostips.com/
http://www.dostips.com/forum/faq.php
http://www.dostips.com/forum/index.php
http://www.dostips.com/forum/memberlist.php?mode=viewprofile&u=11
http://www.dostips.com/forum/memberlist.php?mode=viewprofile&u=12
http://www.dostips.com/forum/memberlist.php?mode=viewprofile&u=13
http://www.dostips.com/forum/memberlist.php?mode=viewprofile&u=14
http://www.dostips.com/forum/memberlist.php?mode=viewprofile&u=15
http://www.dostips.com/forum/memberlist.php?mode=viewprofile&u=17
http://www.dostips.com/forum/memberlist.php?mode=viewprofile&u=18
http://www.dostips.com/forum/memberlist.php?mode=viewprofile&u=19
http://www.dostips.com/forum/memberlist.php?mode=viewprofile&u=21
http://www.dostips.com/forum/memberlist.php?mode=viewprofile&u=23
http://www.dostips.com/forum/memberlist.php?mode=viewprofile&u=28
http://www.dostips.com/forum/memberlist.php?mode=viewprofile&u=29
http://www.dostips.com/forum/memberlist.php?mode=viewprofile&u=32
http://www.dostips.com/forum/memberlist.php?mode=viewprofile&u=4919
http://www.dostips.com/forum/memberlist.php?mode=viewprofile&u=5
http://www.dostips.com/forum/memberlist.php?mode=viewprofile&u=5119
http://www.dostips.com/forum/memberlist.php?mode=viewprofile&u=9
http://www.dostips.com/forum/posting.php?mode=post&f=3
http://www.dostips.com/forum/search.php
http://www.dostips.com/forum/search.php?search_id=active_topics
http://www.dostips.com/forum/search.php?search_id=unanswered
http://www.dostips.com/forum/ucp.php?mode=login
http://www.dostips.com/forum/ucp.php?mode=register
http://www.dostips.com/forum/viewforum.php?f=3
http://www.dostips.com/forum/viewforum.php?f=3&start=3950
http://www.dostips.com/forum/viewforum.php?f=3&start=4000
http://www.dostips.com/forum/viewforum.php?f=3&start=4050
http://www.dostips.com/forum/viewforum.php?f=3&start=4100
http://www.dostips.com/forum/viewforum.php?f=3&start=4150
http://www.dostips.com/forum/viewforum.php?f=3&start=4150#
http://www.dostips.com/forum/viewforum.php?f=4
http://www.dostips.com/forum/viewtopic.php?f=3&t=10
http://www.dostips.com/forum/viewtopic.php?f=3&t=10&p=19#p19
http://www.dostips.com/forum/viewtopic.php?f=3&t=11
http://www.dostips.com/forum/viewtopic.php?f=3&t=11&p=21#p21
http://www.dostips.com/forum/viewtopic.php?f=3&t=12
http://www.dostips.com/forum/viewtopic.php?f=3&t=12&p=26#p26
http://www.dostips.com/forum/viewtopic.php?f=3&t=14
http://www.dostips.com/forum/viewtopic.php?f=3&t=14&p=30#p30
http://www.dostips.com/forum/viewtopic.php?f=3&t=15
http://www.dostips.com/forum/viewtopic.php?f=3&t=15&p=39#p39
http://www.dostips.com/forum/viewtopic.php?f=3&t=16
http://www.dostips.com/forum/viewtopic.php?f=3&t=16&p=36#p36
http://www.dostips.com/forum/viewtopic.php?f=3&t=20
http://www.dostips.com/forum/viewtopic.php?f=3&t=20&p=46#p46
http://www.dostips.com/forum/viewtopic.php?f=3&t=21
http://www.dostips.com/forum/viewtopic.php?f=3&t=21&p=50#p50
http://www.dostips.com/forum/viewtopic.php?f=3&t=24
http://www.dostips.com/forum/viewtopic.php?f=3&t=24&p=56#p56
http://www.dostips.com/forum/viewtopic.php?f=3&t=27
http://www.dostips.com/forum/viewtopic.php?f=3&t=27&p=58#p58
http://www.dostips.com/forum/viewtopic.php?f=3&t=28
http://www.dostips.com/forum/viewtopic.php?f=3&t=28&p=63#p63
http://www.dostips.com/forum/viewtopic.php?f=3&t=30
http://www.dostips.com/forum/viewtopic.php?f=3&t=30&p=73#p73
http://www.dostips.com/forum/viewtopic.php?f=3&t=31
http://www.dostips.com/forum/viewtopic.php?f=3&t=31&p=128#p128
http://www.dostips.com/forum/viewtopic.php?f=3&t=32
http://www.dostips.com/forum/viewtopic.php?f=3&t=32&p=92#p92
http://www.dostips.com/forum/viewtopic.php?f=3&t=33
http://www.dostips.com/forum/viewtopic.php?f=3&t=33&p=79#p79
http://www.dostips.com/forum/viewtopic.php?f=3&t=35
http://www.dostips.com/forum/viewtopic.php?f=3&t=35&p=78#p78
http://www.dostips.com/forum/viewtopic.php?f=3&t=36
http://www.dostips.com/forum/viewtopic.php?f=3&t=36&p=80#p80
http://www.dostips.com/forum/viewtopic.php?f=3&t=44
http://www.dostips.com/forum/viewtopic.php?f=3&t=44&p=98#p98
http://www.dostips.com/forum/viewtopic.php?f=3&t=45
http://www.dostips.com/forum/viewtopic.php?f=3&t=45&p=113#p113
http://www.dostips.com/forum/viewtopic.php?f=3&t=47
http://www.dostips.com/forum/viewtopic.php?f=3&t=47&p=111#p111
http://www.dostips.com/forum/viewtopic.php?f=3&t=48
http://www.dostips.com/forum/viewtopic.php?f=3&t=48&p=133#p133
http://www.dostips.com/forum/viewtopic.php?f=3&t=49
http://www.dostips.com/forum/viewtopic.php?f=3&t=49&p=132#p132
http://www.dostips.com/forum/viewtopic.php?f=3&t=4980
http://www.dostips.com/forum/viewtopic.php?f=3&t=4980&p=0#p0
http://www.dostips.com/forum/viewtopic.php?f=3&t=4981
http://www.dostips.com/forum/viewtopic.php?f=3&t=4981&p=0#p0
http://www.dostips.com/forum/viewtopic.php?f=3&t=4982
http://www.dostips.com/forum/viewtopic.php?f=3&t=4982&p=0#p0
http://www.dostips.com/forum/viewtopic.php?f=3&t=4983
http://www.dostips.com/forum/viewtopic.php?f=3&t=4983&p=0#p0
http://www.dostips.com/forum/viewtopic.php?f=3&t=9
http://www.dostips.com/forum/viewtopic.php?f=3&t=9&p=17#p17
http://www.freeforums.org/
http://www.phpbb.com/
http://www.stsoftware.biz/index.html
Re: help sorting list of filename by its string lenght
foxi,
its really work to your original 3rd code !
finally, i find out the problem is this script:
an addition of echo in "echo del temp.tmp 2>nul"
or
deleting this script: "del temp.tmp 2>nul"
this should be added as rem (to remind me of importance):
first i remove echo to "echo del temp.tmp 2>nul"
and the result is working perfectly!
and it also work when i return back that script to my last code!!!
but until now i cant understand why it work and why its necessary?
if its necessary then i will review back all codes again which i had read it codes several times in many topics before.
anyways thanks as its a necessary to my study too.
its really work to your original 3rd code !
finally, i find out the problem is this script:
an addition of echo in "echo del temp.tmp 2>nul"
or
deleting this script: "del temp.tmp 2>nul"
this should be added as rem (to remind me of importance):
Code: Select all
@echo off
:: sort names by number of characters
:: dont add an "echo" to "del temp.tmp 2>nul"
:: nor delete this script: "del temp.tmp 2>nul"
:: if not -- it will add blanklines equal to the number of input lines.
del temp.tmp 2>nul
for /f "delims=" %%a in (' type "file.txt"') do call :next "%%a"
for /f "tokens=1,* delims=>" %%a in (' sort ^< temp.tmp ') do echo(%%b >>foxi.txt
del temp.tmp 2>nul
pause
goto :EOF
:next
...
...
...
first i remove echo to "echo del temp.tmp 2>nul"
and the result is working perfectly!
and it also work when i return back that script to my last code!!!
but until now i cant understand why it work and why its necessary?
if its necessary then i will review back all codes again which i had read it codes several times in many topics before.
anyways thanks as its a necessary to my study too.
Re: help sorting list of filename by its string lenght
bars143 wrote:foxi,
finally, i find out the problem is this script:
an addition of echo in "echo del temp.tmp 2>nul"
or
deleting this script: "del temp.tmp 2>nul"
but until now i cant understand why it work and why its necessary?
Thanks, I'm glad you sorted out the problem.
That line is needed to iniitalise the temporary file I used, by deleting it, which holds the strings in a format like this, which when sorted gives the list in line length order.
Code: Select all
000010>filename02
000015>filename 10 bob
000013>filenamexxx01
000013>filenamebbb53
000010>filename01
If the file remains from a previous run then it will skew the results with old data.
The input to the routine is either through the file.txt or via a DIR /b as I used earlier on.
Cheers
foxi
Re: help sorting list of filename by its string lenght
foxi,
thanks again for an explanation.
its an existence of temp.tmp which shared the same folder of batch code -- is the cause all the trouble for me.
i did test afterward for other possible causes,
and i found out that without this script :
del temp.tmp 2>nul
or converted as a comment:
rem del temp.tmp 2>nul
the batch will also work if the file:
"temp.tmp" is not present in the same folder with the said batch file.
inclusion of this script:del temp.tmp 2>nul is still the best practice i ever think.
thanks again for an explanation.
its an existence of temp.tmp which shared the same folder of batch code -- is the cause all the trouble for me.
i did test afterward for other possible causes,
and i found out that without this script :
del temp.tmp 2>nul
or converted as a comment:
rem del temp.tmp 2>nul
the batch will also work if the file:
"temp.tmp" is not present in the same folder with the said batch file.
inclusion of this script:del temp.tmp 2>nul is still the best practice i ever think.
Re: help sorting list of filename by its string lenght
@bars143:
The new version of my program below is simpler and run faster than the previous one. Please, test it.
Antonio
The new version of my program below is simpler and run faster than the previous one. Please, test it.
Code: Select all
@echo off
setlocal EnableDelayedExpansion
set len=10000
set "line="
for /F "tokens=1* delims=]" %%a in ('cmd /D /U /C type input.txt ^| find /N /V ""') do (
if "%%b" neq "" (
set /A len+=1
if "%%b" neq "=" (set "line=!line!%%b") else set "line=!line!\"
) else if !len! neq 10000 (
set name[!len:~-4!;!line!]=1
set len=10000
set "line="
)
)
for /F "tokens=2 delims=;]" %%a in ('set name[') do (
set "file=%%a"
echo !file:\==!
)
Antonio
Re: help sorting list of filename by its string lenght
It has a number of problematic characters - leading ] characters and ; and ! and ^ are problems.
They may not be problems in most URLs - but don't some URLs use a semicolon?
They may not be problems in most URLs - but don't some URLs use a semicolon?
Re: help sorting list of filename by its string lenght
using my machine : w7 32bit
here are the speeds test result (in seconds) between your old and new scripts:
take note of above when i repeat again - the old script slowed down while the new script run faster a second around !?
i dont know about the differences?
here is old script with added time-speeds test script and output to four files in one go:
here is new script with added time-speeds test script and output to four files:
thats all and thanks for new methods and its worth for learning too.
Bars
here are the speeds test result (in seconds) between your old and new scripts:
Code: Select all
(tested to produced four files each in one run and i used stopwatch.txt to collect time-speed)
old script speedtest status: new script speedtest status:
---------------------------- ---------------------------
first test = 15.74 first test = 20.15
second test = 16.82 second test = 18.91
take note of above when i repeat again - the old script slowed down while the new script run faster a second around !?
i dont know about the differences?
here is old script with added time-speeds test script and output to four files in one go:
Code: Select all
@echo off
setlocal EnableDelayedExpansion
echo %time% >stopwatch.txt
set maxLen=80
:top
if !count! equ 5 echo %time% >>stopwatch.txt &goto :EOF
for /F "delims=" %%a in (input.txt) do (
set "file=%%a"
call :procFile len=
set len=000!len!
set name[!len:~-4!;!file!]=1
)
for /F "tokens=2 delims=;]" %%a in ('set name[') do (
set "file=%%a"
echo !file:\==! >>old-output!count!.txt
)
set /a "count+=1"
goto:top
:procFile len=
for /L %%i in (0,1,%maxLen%) do if "!file:~%%i,1!" neq "" (
set len=%%i
if "!file:~%%i,1!" equ "=" (
set /A j=%%i+1
for %%j in (!j!) do set "file=!file:~0,%%i!\!file:~%%j!"
)
)
exit /b
here is new script with added time-speeds test script and output to four files:
Code: Select all
@echo off
setlocal EnableDelayedExpansion
echo %time% >stopwatch.txt
set len=10000
set "line="
:top
if !count! equ 5 echo %time% >>stopwatch.txt &goto :EOF
for /F "tokens=1* delims=]" %%a in ('cmd /D /U /C type input.txt ^| find /N /V ""') do (
if "%%b" neq "" (
set /A len+=1
if "%%b" neq "=" (set "line=!line!%%b") else set "line=!line!\"
) else if !len! neq 10000 (
set name[!len:~-4!;!line!]=1
set len=10000
set "line="
)
)
for /F "tokens=2 delims=;]" %%a in ('set name[') do (
set "file=%%a"
echo !file:\==! >>new-output!count!.txt
)
set /a "count+=1"
goto:top
thats all and thanks for new methods and its worth for learning too.
Bars
Re: help sorting list of filename by its string lenght
bars143 wrote:using my machine : w7 32bit
here are the speeds test result (in seconds) between your old and new scripts:Code: Select all
(tested to produced four files each in one run and i used stopwatch.txt to collect time-speed)
old script speedtest status: new script speedtest status:
---------------------------- ---------------------------
first test = 15.74 first test = 20.15
second test = 16.82 second test = 18.91
take note of above when i repeat again - the old script slowed down while the new script run faster a second around !?
i dont know about the differences?
. . .
Bars
I can't explain those timings...
Well, the next faster solution is a JScript one (like REPL.BAT). The Batch-JScript hybrid program below is a direct translation of my first solution; I included the equivalent Batch code at right side as comments.
Code: Select all
@if (@CodeSection == @Batch) @then
@echo off
CScript //nologo //E:JScript "%~F0" < input.txt
goto :EOF
@end
// JScript section
var name = new Array(), file, len, a;
while ( ! WScript.Stdin.AtEndOfStream ) { // for /F "delims=" %%a in (input.txt) do (
file = WScript.Stdin.ReadLine(); // set "file=%%a"
// call :StrLenVar file len=
len = "000"+file.length; // set len=000!len!
name.push(len.slice(-4)+file); // set name[!len:~-4!;!file!]=1
} // )
name.sort(); // rem In Batch the arrays are kept always sorted by index
for ( a in name ) WScript.Echo(name[a].substr(4)); // for /F "tokens=2 delims=;]" %%a in ('set name[') do echo %%a
This solution should run faster than REPL.BAT, because it is much smaller and written specifically for this problem.
Antonio
Re: help sorting list of filename by its string lenght
Aacini,
your third code in batch file is now faster than a repl in command prompt.
one input = average seconds for repl is within 0.02 secs
yours is within 0.01 secs !!!
but can you give code for a test that count :
0.00001 seconds ?
im only using %time%
but i dont how to use ping (which has 1000 milliseconds/sec) for use in "time-speed test" ?
and thanks for the fastest third code !!!
Bars
your third code in batch file is now faster than a repl in command prompt.
one input = average seconds for repl is within 0.02 secs
yours is within 0.01 secs !!!
but can you give code for a test that count :
0.00001 seconds ?
im only using %time%
but i dont how to use ping (which has 1000 milliseconds/sec) for use in "time-speed test" ?
and thanks for the fastest third code !!!
Bars