View unanswered posts | View active topics It is currently 24 Nov 2014 11:41



Post new topic Reply to topic  [ 32 posts ]  Go to page 1, 2, 3  Next
Convert CRLF to LF 
Author Message

Joined: 06 Aug 2012 12:01
Posts: 32
Post Convert CRLF to LF
I'm sending a file generated in Windows to a Linux machine, I need to replace the line terminator 'CRLF' the terminator 'LF'.

How can I do this?


10 Aug 2012 05:23
Profile

Joined: 23 Dec 2011 13:59
Posts: 2012
Post Re: Convert CRLF to LF
I usually use a DOS2UNIX utility. Plenty of them out there.
http://dos2unix.sourceforge.net/


10 Aug 2012 05:41
Profile
Expert

Joined: 16 May 2011 08:21
Posts: 1273
Location: Flanders_(Belgium)
Post Re: Convert CRLF to LF
[edit]
This CRLFtoLF conversion fails if the source contains single linefeeds, they are both converted and appended at the end :(
Code:
@echo off &setlocal disableDelayedExpansion

set "$iFile=CRLFtoLF.TXT"
set "$oFile=ou.TXT"

set $lf=^


::
for /f %%? in (

   '2^>nul ^( ^< "%$iFile%" find.EXE /c /v "" ^)'

) do    set "$end=%%?"

echo.linefeeds[%$end%]

< "%$iFile%" (

   for /l %%! in (

      1, 1, %$end%

   ) do    set "$=" &set /p "$=" &(

      setlocal enabledelayedexpansion
      rem (
         (<nul set /p ="!$!!$lf!")
      rem )
      endlocal
   )

) > "%$oFile%"

echo.
echo.'%$oFile%'
type "%$oFile%"

pause
exit
LFtoCRLF is easy
Code:
@echo off &setlocal disableDelayedExpansion

set "$iFile=LFtoCRLF.TXT"
set "$oFile=ou.TXT"

(for /f ^"usebackqeol^=^

delims^=^" %%? in (

       "%$iFile%"

) do   (echo(%%?)

)> "%$oFile%"

echo.
echo.'%$oFile%'
type "%$oFile%"

pause
exit
Yet this post shows how to read in hex and this post shows you can convert :hex2str But I never needed it so I stop here :)


10 Aug 2012 07:05
Profile WWW

Joined: 10 Feb 2012 02:20
Posts: 4412
Post Re: Convert CRLF to LF
Ed Dyreen wrote:
LFtoCRLF is easy


For less than 65k lines, it is indeed.

Code:
more a.htm >b.htm


10 Aug 2012 08:21
Profile

Joined: 06 Aug 2012 12:01
Posts: 32
Post Re: Convert CRLF to LF
Hi,
i'm running the fowlling script, but it return an empty file.

Any Help ?

Code:
@echo off &setlocal disableDelayedExpansion

set "$iFile=c:\TEMP\A.txt"
set "$oFile=c:\TEMP\B.txt"

set $lf=^


::
for /f %%? in (
   '2^>nul ^( ^< "%$iFile%" find.EXE /c /v "" ^)'
) do    set "$end=%%?"
echo.linefeeds[%$end%]
< "%$iFile%" (
   for /l %%! in (
      1, 1, %$end%
   ) do    set "$=" &set /p "$=" &(
      setlocal enabledelayedexpansion
     rem (
         (<nul set /p ="!$!!$lf!")
      rem )
      endlocal
   )
) > "%$oFile%"

echo.
echo.'%$oFile%'
type "%$oFile%"

pause
exit


10 Aug 2012 10:54
Profile
Expert

Joined: 13 Jan 2012 21:24
Posts: 441
Post Re: Convert CRLF to LF
RMSoares wrote:
i'm running the fowlling script, but it return an empty file.

Ed's code works nicely here. What is the contents of your c:\TEMP\A.txt file, and what is displayed in the console after you run the given code?

Liviu


10 Aug 2012 13:35
Profile

Joined: 10 Feb 2012 02:20
Posts: 4412
Post Re: Convert CRLF to LF
Ed's code has the usual problem of removing blank lines.

If exact duplication of the file is required then this is best left to a dedicated utility, there are many to be found in google.


10 Aug 2012 13:48
Profile
Expert

Joined: 13 Jan 2012 21:24
Posts: 441
Post Re: Convert CRLF to LF
foxidrive wrote:
Ed's code has the usual problem of removing blank lines.

That one is fixable, just replace Ed's line with...
Code:
      rem (
         if defined $ (<nul set /p ="!$!!$lf!") else (<nul set /p "=!$lf!")
      rem )

foxidrive wrote:
If exact duplication of the file is required then this is best left to a dedicated utility, there are many to be found in google.

Agreed. Batch solutions also have size limitation on the line length, drop control characters at the end of lines, and 'find /c' miscounts one less empty line at the end of the file.

Liviu


10 Aug 2012 14:22
Profile

Joined: 10 Feb 2012 02:20
Posts: 4412
Post Re: Convert CRLF to LF
Liviu wrote:
foxidrive wrote:
Ed's code has the usual problem of removing blank lines.

That one is fixable, just replace Ed's line with...
Code:
      rem (
         if defined $ (<nul set /p ="!$!!$lf!") else (<nul set /p "=!$lf!")
      rem )



It still drops blank lines, Liviu


10 Aug 2012 14:43
Profile
Expert

Joined: 13 Jan 2012 21:24
Posts: 441
Post Re: Convert CRLF to LF
foxidrive wrote:
It still drops blank lines

That's odd. It certainly doesn't drop them here. With the one line change I posted, my test case gives...
Code:
C:\tmp>type crlftolf.txt

line 2


line 5

"! % < " ( " > " ) ^ "

line 9

C:\tmp>crlftolf.cmd
linefeeds[9]

'ou.TXT'

line 2


line 5

"! % < " ( " > " ) ^ "

line 9

C:\tmp>
...and the ou.txt file has all the right LFs upon hex inspection.

Just to be sure, did you paste the line literally? The "else" part has the opening quote placed before the "=" sign, and that's deliberate. Or maybe it's just an isolated quirk of my XP sp3.

Either way, the issue itself of dropping blank lines is on the output side. On the input side, blank lines are read in correctly. Only remaining problem is how to send a single LF character to the output stream. If (<nul set /p "=!$lf!") doesn't work reliably under all windows, then perhaps someone can come up with a better/universal alternative.

Liviu


10 Aug 2012 15:02
Profile

Joined: 10 Feb 2012 02:20
Posts: 4412
Post Re: Convert CRLF to LF
Yes, (<nul set /p "=!$lf!") doesn't work in Windows 7.

I used this and it gave me the extra lines, but with the 'a'

(<nul set /p "=a!$lf!")


10 Aug 2012 15:11
Profile
Expert

Joined: 13 Jan 2012 21:24
Posts: 441
Post Re: Convert CRLF to LF
foxidrive wrote:
Yes, (<nul set /p "=!$lf!") doesn't work in Windows 7.

Indeed. Thanks for (re)pointing. Apparently, the behavior changed since Vista http://www.dostips.com/forum/viewtopic.php?p=16857#p16857.

For the case here it would be relatively straightforward to count/accumulate the empty lines and prepend the outstanding LFs to the next non-empty line. This would still miss any trailing empty lines at the end of the file, but that's unavoidable as long as no way is found to reliably emit single LFs.

Liviu


10 Aug 2012 16:46
Profile
Expert

Joined: 16 May 2011 08:21
Posts: 1273
Location: Flanders_(Belgium)
Post Re: Convert CRLF to LF
foxidrive wrote:
Ed's code has the usual problem of removing blank lines.
in.TXT
Code:
this[0A]^wo rks!



";Please <preserve=^"this line"!>"[0A][0A][0A][0A]This
^wo rks!
CRLFtoLF.CMD
Code:
@echo off &setlocal disableDelayedExpansion &title %~n0

set "$iFile=in.TXT"
set "$oFile=ou.TXT"

set $lf=^


::
for /f "delims=#" %%? in ( '"prompt #$H# &echo on &for %%b in (1) do rem"' ) do set "$BS=%%?"


echo.¯ '%$iFile%'
type "%$iFile%" &echo.
echo.® '%$iFile%'

for /f %%? in (

       '2^>nul ^( ^< "%$iFile%" find.EXE /c /v "" ^)'

) do   set "$end=%%?"

< "%$iFile%" (

       for /l %%! in (

              1, 1, %$end%

       ) do   set "$=" &set /p "$=" &(

              setlocal enabledelayedexpansion
              rem (  <nul set /p ="_!$BS!!$!!$lf!" >&2
                     <nul set /p ="_!$BS!!$!!$lf!"
              rem )
              endlocal
       )

) > "%$oFile%"
echo.

echo.¯ '%$oFile%'
type "%$oFile%" &echo.
echo.® '%$oFile%'

echo.linefeeds[%$end%]
pause
exit
Code:
» 'in.TXT'
this
^wo rks!



";Please <preserve=^"this line"!>"



This
^wo rks!
« 'in.TXT'

» 'ou.TXT'
this
^wo rks!



";Please <preserve=^"this line"!>"



This
^wo rks!






« 'ou.TXT'
linefeeds[11]
Another problem is that find.EXE counts LFs AND CRLF yet the set /p doesn't stops reading when it encounters an LF. But that can be solved by counting the numbers of LFs read by the set /p and decrementing the loop on the fly. 8)


10 Aug 2012 23:10
Profile WWW
Expert

Joined: 13 Jan 2012 21:24
Posts: 441
Post Re: Convert CRLF to LF
Ed Dyreen wrote:
foxidrive wrote:
Ed's code has the usual problem of removing blank lines.
in.TXT

Sorry, but I don't follow. Running your example, the screen looks fine, but the saved ou.txt file has the literal BACKSPACE 0x08 embedded, which defeats the purpose here. As I see it, jeb's comment "this only works with display output, but not with file output" (http://www.dostips.com/forum/viewtopic.php?p=16857#p16857) still stands unanswered.

Liviu


10 Aug 2012 23:31
Profile
Expert

Joined: 16 May 2011 08:21
Posts: 1273
Location: Flanders_(Belgium)
Post Re: Convert CRLF to LF
[edit Aug 2012 13:34]
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Quote:
Sorry, but I don't follow. Running your example, the screen looks fine, but the saved ou.txt file has the literal BACKSPACE 0x08 embedded, which defeats the purpose here. As I see it, jeb's comment "this only works with display output, but not with file output" (viewtopic.php?p=16857#p16857) still stands unanswered.

Liviu
I didn't test it properly :oops: but it seem to work now :mrgreen:

in.TXT
Code:
this[0A]^wo rks!



";Please <preserve=^"this line"!>"[0A][0A][0A][0A]This
^wo rks!
ou.TXT
Code:
this[0A]^wo rks![0A][0A][0A][0A]";Please <preserve=^"this line"!>"[0A][0A][0A][0A]This[0A]^wo rks!
console
Code:
» 'in.TXT'
this
^wo rks!



";Please <preserve=^"this line"!>"



This
^wo rks!
« 'in.TXT'

» 'ou.TXT'
this
^wo rks!



";Please <preserve=^"this line"!>"



This
^wo rks!
« 'ou.TXT'
linefeeds[10]
Druk op een toets om door te gaan. . .
I've been fighting with the '(<nul set /p =!$!)' but it kept getting confused on the escape character inside '";Please <preserve=^"this line"!>"' even with the delayed expansion :shock: I just couldn't get it right on XP so, I ended up using '(echo(!$!)' but this required me to push over endlocal.
But then suddenly the '(<nul set /p =!$!)' works again :?:
Code:
@echo off &setlocal disableDelayedExpansion &title %~n0

set "$iFile=in.TXT"
set "$oFile=ou.TXT"





prompt $G &<nul set /p "= " &chcp 850 &color 0B %=      prompt minimalistic, codepage 850, colorConsole      =%
:: --------------------------------------------------------------------------------------------------------------------------
:: - %* callback script validation                                                                                          -
:: --------------------------------------------------------------------------------------------------------------------------
:: last updated       : 2012^08^08
:: (
   set "$notDelayedFlag=!"          %=    persist over endlocal               =%
:: )
:: --------------------------------------------------------------------------------------------------------------------------

:: --------------------------------------------------------------------------------------------------------------------------
echo. &echo. ¯ offDelayed definitions
:: --------------------------------------------------------------------------------------------------------------------------
setlocal disableDelayedExpansion
:: (

:: --------------------------------------------------------------------------------------------------------------------------
echo. &echo. ¯ echon_
:: --------------------------------------------------------------------------------------------------------------------------
:: last updated       : 31/01/2012
::
:: on channel 1: echo with LineFeed
:: (
%=   =%set "echon_=echo("
:: )
echo. ® echon_ [ok:loaded]
::
( >con echo. &%echon_% This &%echon_%Works ) 2>nul
:: --------------------------------------------------------------------------------------------------------------------------
:: --------------------------------------------------------------------------------------------------------------------------
%echon_% &%echon_% ¯ nechon_
:: --------------------------------------------------------------------------------------------------------------------------
:: last updated       : 31/01/2012
:: support            : naDelayed
::
:: on channel 1: LineFeed, echo with LineFeed
:: (
%=   =%set "nechon_=%echon_%&%echon_%"
:: )
%echon_% ® nechon_ [ok:loaded]
::
( %nechon_% This &%nechon_%Works ) 2>nul
:: --------------------------------------------------------------------------------------------------------------------------
::
goto :skip "()"
echo.endoftest
pause
exit
:skip ()
:: --------------------------------------------------------------------------------------------------------------------------
%nechon_% ¯ echo_
:: --------------------------------------------------------------------------------------------------------------------------
:: last updated       : 31/01/2012
::
:: on channel 1: echo without LineFeed
:: (
%=   =%set "echo_=<nul set/p="
:: )
%echon_% ® echo_ [ok:loaded]
::
( %echo_% This &%echo_% Works &echo. ) 2>nul
:: --------------------------------------------------------------------------------------------------------------------------
:: --------------------------------------------------------------------------------------------------------------------------
%nechon_% ¯ necho_
:: --------------------------------------------------------------------------------------------------------------------------
:: last updated       : 31/01/2012
:: support            : naDelayed
::
:: on channel 1: LineFeed then echo without LineFeed
:: (
%=   =%set "necho_=%echon_%&%echo_%"
:: )
%necho_% ® necho_ [ok:loaded]
::
( %necho_% This &%necho_%Works &echo. ) 2>nul
:: --------------------------------------------------------------------------------------------------------------------------
::
goto :skip "()"
echo.endoftest
pause
exit
:skip ()
:: --------------------------------------------------------------------------------------------------------------------------
%echon_% &%necho_% ¯ n2echo_
:: --------------------------------------------------------------------------------------------------------------------------
:: last updated       : 31/01/2012
:: support            : naDelayed
::
:: on channel 1: 2 LineFeeds then echo without LineFeed
:: (
%=   =%set "n2echo_=%echon_%&%necho_%"
:: )
%necho_% ® n2echo_ [ok:loaded]
::
( %n2echo_% This &%n2echo_% Works &echo. ) 2>nul
:: --------------------------------------------------------------------------------------------------------------------------
::
goto :skip "()"
echo.endoftest
pause
exit
:skip ()
:: --------------------------------------------------------------------------------------------------------------------------
%n2echo_% ¯ n2echon_
:: --------------------------------------------------------------------------------------------------------------------------
:: last updated       : 31/01/2012
:: support            : naDelayed
::
:: on channel 1: 2 LineFeeds, echo with LineFeed
:: (
%=   =%set "n2echon_=%nechon_%&%echon_%"
:: )
%necho_% ® n2echon_ [ok:loaded]
::
( %n2echon_% This &%n2echon_%Works ) 2>nul
:: --------------------------------------------------------------------------------------------------------------------------
::
goto :skip "()"
echo.endoftest
pause
exit
:skip ()
:: --------------------------------------------------------------------------------------------------------------------------
%necho_% ¯ pre_
:: --------------------------------------------------------------------------------------------------------------------------
:: last updated       : 31/01/2012
::
:: (
%=   =%set "pre_=%n2echo_% ¯"
:: )
%necho_% ® pre_ [ok:loaded]
:: --------------------------------------------------------------------------------------------------------------------------
:: --------------------------------------------------------------------------------------------------------------------------
%pre_% post_
:: --------------------------------------------------------------------------------------------------------------------------
:: last updated       : 31/01/2012
::
:: (
%=   =%set "post_=%necho_% ®"
:: )
%post_% post_ [ok:loaded]
:: --------------------------------------------------------------------------------------------------------------------------
::
goto :skip "()"
echo.endoftest
pause
exit
:skip ()
:: --------------------------------------------------------------------------------------------------------------------------
%pre_% $lf Asci-0x0A, LineFeed naDelayed
:: --------------------------------------------------------------------------------------------------------------------------
:: last updated       : 11/04/2012
::
:: The first set/p reads the first line, in this case the "@echo off".
:: The pause reads the next character, in this case the next line is empty, so it reads a <CR>.
:: The next set/p reads now the <LF> and the next line "<"%~f0" >nul (set/pLF=&pause&set/pLF=)"
:: (
   setlocal enableDelayedExpansion
   :: (
      <"%~f0" >nul (set/p$lf=&pause&set/p$lf=)
   :: )
   for %%r in ( "!$lf:~0,1!" ) do endlocal &set "$lf=%%~r" &echo. &echo.This%%~rworks
:: )
%post_% $lf Asci-0x0A [ok:loaded]
:: --------------------------------------------------------------------------------------------------------------------------
::
goto :skip "()"
echo.endoftest
pause
exit
:skip ()
:: --------------------------------------------------------------------------------------------------------------------------
%pre_% endoftest
:: --------------------------------------------------------------------------------------------------------------------------
:: last updated       : 20/05/2012
:: support            : naDelayed
::
:: on console; notify the end of a test, terminates script !
:: (
%=   =%set "endoftest=(%necho_% endoftest &pause&exit 0)>con"
:: )
%post_% endoftest [ok:loaded]
::
goto :skip "()"
:: (
   %endoftest%
:: )
:skip ()
:: --------------------------------------------------------------------------------------------------------------------------
::
goto :skip "()"
%endoftest%
:skip ()
:: --------------------------------------------------------------------------------------------------------------------------
%pre_% $cr Ascii-0x0D, only for DelayedExpansion
:: --------------------------------------------------------------------------------------------------------------------------
:: last updated       : 13/07/2012
:: (
   for /f %%? in ( 'copy /Z "%~f0" nul' ) do set "$cr=%%?"
:: )
%post_% $cr Ascii-0x0D, only for DelayedExpansion [ok:loaded]
::
setlocal enableDelayedExpansion &%nechon_% This!$cr! Works &endlocal
:: --------------------------------------------------------------------------------------------------------------------------
::
goto :skip "()"
%endoftest%
:skip ()
:: --------------------------------------------------------------------------------------------------------------------------
%pre_% $n1c, newLine+continuation, 1 expansions, 0sets, 1echo
:: --------------------------------------------------------------------------------------------------------------------------
:: last updated       : 31/01/2012
:: (
%=   =%set ^"$n1c=^^^%$lf%%$lf%^%$lf%%$lf%^^"
:: )
%post_% $n1c, newLine+continuation, 1 expansions, 0sets, 1echo [ok:loaded]
::
%necho_%--this%$n1c%
works--
:: --------------------------------------------------------------------------------------------------------------------------
::
goto :skip "()"
%endoftest%
:skip ()
:: --------------------------------------------------------------------------------------------------------------------------
%pre_% $n2c newLine+continuation, 2 expansions, 1sets, 1echo
:: --------------------------------------------------------------------------------------------------------------------------
:: last updated       : 08/03/2012
:: (
%=   =%set ^"$n2c=^^^^^^^%$lf%%$lf%^%$lf%%$lf%^^^%$lf%%$lf%^%$lf%%$lf%^^"
:: )
%post_% $n2c newLine+continuation, 2 expansions, 1sets, 1echo [ok:loaded]
::
setlocal
:: (
   set var=this%$n2c%
works
   %nechon_% ---- &call %echo_% %%var%%
:: )
endlocal
:: --------------------------------------------------------------------------------------------------------------------------
:: --------------------------------------------------------------------------------------------------------------------------
%pre_% forC_, counter
:: --------------------------------------------------------------------------------------------------------------------------
:: last updated       : 31/01/2012
::
:: loop token, counting
:: (
%=   =%set "forC_=for /l %%! in"
:: )
%post_% forC_ [ok:loaded]
::
%n2echon_% %forC_%
:: --------------------------------------------------------------------------------------------------------------------------
:: --------------------------------------------------------------------------------------------------------------------------
%pre_% forQ_, looper
:: --------------------------------------------------------------------------------------------------------------------------
:: last updated       : 31/01/2012
::
:: loop token, simple form
:: (
%=   =%set "forQ_=for %%? in"
:: )
%post_% forQ_ [ok:loaded]
::
%n2echon_% %forQ_%
:: --------------------------------------------------------------------------------------------------------------------------
::
goto :skip "()"
%endoftest%
:skip ()
:: --------------------------------------------------------------------------------------------------------------------------
%pre_% ForEntireLine
:: --------------------------------------------------------------------------------------------------------------------------
:: last updated       : 22/02/2012
:: support            : naDelayed
:: (
%=   =%set  ^"forLineR_=for /f ^^^"eol^^=^^^%$lf%%$lf%^%$lf%%$lf%delims^^=^^^" %%r in"
%=   =%set ^"mForLineR_=for /f ^^^^^^^"eol^^^^=^^^^^^^%$lf%%$lf%^%$lf%%$lf%^^^%$lf%%$lf%^%$lf%%$lf%delims^^^^=^^^^^^^" %%r in"
:: )
%post_% ForEntireLine
::
setlocal
:: (
   %n2echo_% a for that always returns the entire line, 1 expansions, 0sets, 1echo
   ::
        %necho_% forLineR_: &%forLineR_% ( ";Please <preserve=^"this line"!>" ) do %echo_% %%r

   %n2echo_% a for that always returns the entire line, 2 expansions, 1sets, 1echo
   ::
   set @MforLineR=%mForLineR_% ( ";Please <preserve=^"this line"!>" ) do %echon_% %%r
        %necho_% @MforLineR: &%@MforLineR%
:: )
endlocal
:: --------------------------------------------------------------------------------------------------------------------------
::
goto :skip "()"
%endoftest%
:skip ()
:: --------------------------------------------------------------------------------------------------------------------------
%pre_% delim_, alphanumeric [a-z], delims [default delimiters]
:: --------------------------------------------------------------------------------------------------------------------------
:: last updated       : 2012^08^09
:: support            : problematic chars: [!,",%,&,(,),<,=,>,?,^,|]
::                      encoded chars    : [*]
:: warn               : variable's contents are used in the splitting process.
::                      do not pass variables with malformatted content !
:: (

:: support            : onDelayed, byVal¦eVal, delayedChars, paramless input
:: (
%=   =%set ^"oMDelim_=%forQ_% (1,2) do if %%?==2 (%$n2c%
%=      =%set $=!$:42#=4\2#!^^^&set $=!$:^^^"=""!%=                pre-delay     =%%$n2c%
%=      =%set $=!$:\*=42#!^^^&set "$=!$:^=^^^^!"^^^&call set "$=%%^$:^!=#"#"^!%%"!%=    delay 2-times    =%%$n2c%
%=      =%set "$=!$:#"#"=^^^!"^^^&set $=!$:""=^^^"!%=                post-delay    =%%$n2c%
%=      =%set ?=^^^&%forQ_% (!$!) do set ?=!?!¦%%?%$n2c%
%=      =%if +!?!==+ set ?=""%$n2c%
%=      =%set ?=!?:42#=\*!^^^&set ?=!?:4\2#=42#!%$n2c%
%=   =%)^^^&for /f "tokens=1-26delims=¦" %%a in ("!?!") do "
:: )

:: )
%post_% Delim_, alphanumeric [a-z], delims [default delimiters]
::
setlocal disableDelayedExpansion
:: (
   set "$var=This\*^Works !"

   setlocal disableDelayedExpansion
   :: (
%=      =% set ^"@macro_=%oMDelim_%(%$n1c%

%=         =%echo.%$n1c%
%=         =%echo. oMDelim_:%$n1c%
%=         =%echo. a=%%~a=^^^!%%~a^^^!_%$n1c%
%=         =%echo. b=%%~b=^^^!%%~b^^^!_%$n1c%
%=         =%echo. c=%%~c=^^^!%%~c^^^!_%$n1c%

%=      =%endlocal)else setlocal enableDelayedExpansion^&set $="
      ::
      ( %@macro_% $var, "This ^^Works ^!", "!$var!" )
   :: )
   endlocal
:: )
endlocal
:: --------------------------------------------------------------------------------------------------------------------------
::
goto :skip "()"
%endoftest%
:skip ()
:: --------------------------------------------------------------------------------------------------------------------------
%pre_% macroStart_
:: --------------------------------------------------------------------------------------------------------------------------
:: last updated       : 2012^08^10
:: support            : naDelayed
::
:: Retrieves current DelayedFlag needed by macroEnd and sets localscope.
:: (
%=   =%set ^"macroStart_=%oMDelim_%(%$n1c%

%=      =%(echo.^&if defined $notDelayedFlag (set/p=NotDelayed^<nul)else set/p=Delayed^<nul)^>^&2%$n1c%
%=      =%if defined $details (set $fetch=, !$details!)else set $fetch=%$n1c%
%=      =%echo.^&echo.^&set/p= ¯ !$defines!!$fetch!^<nul%$n1c%
%=      =%endlocal^&set $details=^&setlocal %%~a%$n1c%

%=   =%)else set $notDelayedFlag=!^&setlocal enableDelayedExpansion^&set $="
:: )
%post_% macroStart_
::
setlocal
:: (
   set "$defines=@This_Works" &set "$details=Some detail"
   ( %macroStart_% enableDelayedExpansion  ) &endlocal
   ( %macroStart_% "disableDelayedExpansion" ) &endlocal
:: )
endlocal
:: --------------------------------------------------------------------------------------------------------------------------
::
goto :skip "()"
%endoftest%
:skip ()
:: --------------------------------------------------------------------------------------------------------------------------
%pre_% endlocalR_
:: --------------------------------------------------------------------------------------------------------------------------
:: last updated       : 30/01/2012
:: support            : onDelayed
:: style              : dBenham's replace
::
:: push over endlocal using replace technique
:: (
%=   =%set ^"endlocalR_=(set ^"$replace=%% ^" !$cr!!$cr!^"%$n1c%
%=   =%)^&for /f "tokens=1-3" %%1 in ("!$replace!") do for %%4 in ("!$lf!") do endlocal^&endlocal^&"
:: )
%post_% endlocalR_
::
setlocal enabledelayedexpansion
:: (
   setlocal &setlocal &%endlocalR_% set "$cr=%%3"   !
   ::
   %necho_% $cr failed !$cr! $cr succes

   setlocal &setlocal
   :: (
      echo.
   :: )
   %endlocalR_% ( %=                      skip a line to max return size to 8k   =%
      ::
      set "$var=one=%%1_%%~4 two=%%2_"   !
   )
   ::
   %necho_% !$var!
:: )
endlocal
:: --------------------------------------------------------------------------------------------------------------------------
::
goto :skip "()"
%endoftest%
:skip ()
:: --------------------------------------------------------------------------------------------------------------------------
%pre_% macroEnd
:: --------------------------------------------------------------------------------------------------------------------------
:: last updated       : 03/02/2012
:: support            : naDelayed, $cr, $lf, theoretical max 8192, real max 8192-10, replacer practical max 8192-+-1965
:: style              : dBenham's replace
::
:: Prepares $defined to be pushed over endlocal using immediate expansion + replace technique,
:: regardless the outer delayed setting
:: (
%=   =%set ^"macroEnd=(setlocal enableDelayedExpansion%$n1c%

%=      =%(echo.^&if defined $notDelayedFlag (set/p= NotDelayed^<nul)else set/p= Delayed^<nul)^>^&2%$n1c%
%=      =%%forQ_% ("!$defines!") do set $=^&set $=!%%~?!^&^&(%$n1c%
%=         =%(echo.^&set/p= ^<nul^&set %%~?)^>^&2%$n1c%
%=         =%set $1=!$:~0,4096!^&set $2=!$:~4096!^&%forQ_% (1,2) do if defined $%%~? (%$n1c%
%=            =%set $=!$%%~?!^&set $=!$:%%=%%1!^&set ^"$=!$:^"=%%2!^"%=   Replace by injection=%%$n1c%
%=            =%for %%r in ("!$cr!") do set $=!$:%%~r=%%3!%$n1c%
%=            =%for %%r in ("!$lf!") do set $=!$:%%~r=%%~4!%$n1c%
%=            =%if not defined $notDelayedFlag call set "$=%%^$:^!=""^!%%"!^&set "$=!$:^=^^!"^&set "$=!$:""=^!"%$n1c%
%=            =%set $%%~?=!$!%$n1c%
%=         =%)%$n1c%
%=      =%)^|^|call :§endSimple "macroEnd, not defined: '!$defines!'"%$n1c%
%=      =%set $=^&set $=set "!$defines!=!$1!!$2!"^!^|^|call :§endSimple "macroEnd, variable overflow: '!$defines!'"%$n1c%
%=      =%(echo.^&set/p= !$!^<nul)^>^&2%$n1c%
%=      =%echo.^&set/p"= ® !$defines! [ok:loaded]"^<nul%$n1c%

%=   =%)"
:: )
%post_% macroEnd
:: (
   setlocal enableDelayedExpansion &set "$defines=$8kVar"
   :: (
      %n2echo_% testing replacer practical max 8192-+-1965

      2>nul ( %macroStart_% enableDelayedExpansion )
      :: (
         set "$8kVar=_##^^#"q"ex^!#%%1#_" %=    16 chars initially =%
         for /l %%! in ( 1, 1, 11 ) do set "$8kVar=!$8kVar!!$8kVar!"
         set "$8kVar=!$8kVar!!$8kVar:~0,-1965!"
      :: )
      %macroEnd%
      %endlocalR_% (
%=      =%%$%
      )

      %n2echo_% $8kVar=!$8kVar!_
   :: )
   endlocal

   setlocal enableDelayedExpansion &set "$defines=$var"
   :: (
      2>nul ( %macroStart_% enableDelayedExpansion )
      :: (
%=         =%set ^"$var=(%$n1c%
%=            =%echo. This "^^Works^!"%$n1c%
%=         =%)else setlocal enableDelayedExpansion ^&set $="
      :: )
      2>nul %macroEnd%
      %endlocalR_% (
%=      =%%$%
      )
      ::
      %n2echo_% $var=!$var!_
   :: )
   endlocal

   setlocal enableDelayedExpansion &set "$defines=$var"
   :: (
      2>nul ( %macroStart_% disableDelayedExpansion )
      :: (
%=         =%set "$var=echo. This "^^Works^!""
      :: )
      2>nul %macroEnd%
      %endlocalR_% (
%=      =%%$%
      )
      ::
      %n2echo_% $var=!$var!_
   :: )
   endlocal
:: )
:: --------------------------------------------------------------------------------------------------------------------------
::
goto :skip "()"
%endoftest%
:skip ()
:: --------------------------------------------------------------------------------------------------------------------------
%pre_% advancedR
:: --------------------------------------------------------------------------------------------------------------------------
:: last updated       : 03/02/2012
:: support            : naDelayed, $cr, $lf
:: style              : dBenham's replace
::
:: Prepares multiple variables to be pushed over endlocal using immediate expansion, regardless the outer delayed setting
:: (
%=   =%set ^"advancedR=%forQ_% (1,2) do if %%?==2 (%$n1c%

%=      =%(echo.^&if defined $notDelayedFlag (set/p= NotDelayed^<nul)else set/p= Delayed^<nul)^>^&2%$n1c%
%=      =%%forQ_% (!$!) do set $=^&set $=!%%~?!^&^&(%$n1c%
%=         =%(echo.^&set/p= ^<nul^&set %%~?)^>^&2%$n1c%
%=         =%set $1=!$:~0,4096!^&set $2=!$:~4096!^&%forQ_% (1,2) do if defined $%%~? (%$n1c%
%=            =%set $=!$%%~?!^&set $=!$:%%=%%1!^&set ^"$=!$:^"=%%2!^"%=   Replace by injection =%%$n1c%
%=            =%for %%r in ("!$cr!") do set $=!$:%%~r=%%3!%$n1c%
%=            =%for %%r in ("!$lf!") do set $=!$:%%~r=%%~4!%$n1c%
%=            =%if not defined $notDelayedFlag call set "$=%%^$:^!=""^!%%"!^&set "$=!$:^=^^!"^&set "$=!$:""=^!"%$n1c%
%=            =%set $%%~?=!$!%$n1c%
%=         =%)%$n1c%
%=         =%(set/p= #%%~?=set "%%~?=!$1!!$2!"^!^<nul)^>^&2%$n1c%
%=         =%set #%%~?=^&set #%%~?=set "%%~?=!$1!!$2!"^!^|^|call :§endSimple "advancedR, variable overflow: '%%~?'"%$n1c%
%=      =%)^|^|call :§endSimple "%%~?: not defined."%$n1c%

%=   =%)else setlocal enableDelayedExpansion^&set $="
:: )
%post_% advancedR
:: (
   setlocal enableDelayedExpansion &set "$notDelayedFlag=!"
   :: (
      set "$var="
      setlocal enableDelayedExpansion
      :: (
         set "$var=This ^^works^!"
      :: )
      %advancedR% $var
      endlocal &endlocal &%#$var%

      echo. &<nul set/p"= " &set "$var"

      set "$var="
      setlocal disableDelayedExpansion
      :: (
         set "$var=This ^works!"
      :: )
      %advancedR% $var
      endlocal &endlocal &%#$var%

      echo. &<nul set/p"= " &set "$var"
   :: )
   endlocal

   setlocal disableDelayedExpansion &set "$notDelayedFlag=!"
   :: (
      set "$var="
      setlocal enableDelayedExpansion
      :: (
         set "$var=This ^^works^!"
      :: )
      %advancedR% $var
      endlocal &endlocal &%#$var%

      echo. &<nul set/p"= " &set "$var"

      set "$var="
      setlocal disableDelayedExpansion
      :: (
         set "$var=This ^works!"
      :: )
      %advancedR% $var
      endlocal &endlocal &%#$var%

      echo. &<nul set/p"= " &set "$var"
   :: )
   endlocal

   setlocal enableDelayedExpansion &set "$defines=$var"
   :: (
      set "$var="
      >nul 2>&1 ( %macroStart_% disableDelayedExpansion )
      :: (
%=         =%set "$var=echo. This "^^Works^!""
      :: )
      %advancedR% $var
      %endlocalR_% (
%=      =%%#$var%
      )
      ::
      %necho_% $var=!$var!_
   :: )
   endlocal
:: )
:: --------------------------------------------------------------------------------------------------------------------------
::
goto :skip "()"
%endoftest%
:skip ()
:: --------------------------------------------------------------------------------------------------------------------------
%pre_% Global return
:: --------------------------------------------------------------------------------------------------------------------------
:: last updated       : 30/01/2012
:: Warning            : Using global $notDelayedFlag, make sure it is correct !
:: (
   setlocal enableDelayedExpansion
   :: (
      %necho_% Globally called &if defined $notDelayedFlag (set/p=NotDelayed<nul)else set/p=Delayed<nul
      %necho_% Building Index...
%=      =%set $Index=^
%=      =%,$lf^
%=      =%,$cr^
%=      =%,$n1c^
%=      =%,$n2c^
%=      =%,echo_^
%=      =%,echon_^
%=      =%,nechon_^
%=      =%,necho_^
%=      =%,n2echo_^
%=      =%,pre_^
%=      =%,post_^
%=      =%,endoftest^
%=      =%,forC_^
%=      =%,forQ_^
%=      =%,forLineR_^
%=      =%,endlocalR_^
%=      =%,macroStart_^
%=      =%,macroEnd^
   :: )
   %necho_% Preparing involved variables for global return...
   ( %advancedR% !$Index! )
   %endlocalR_% ( endlocal %=                   skip a line to max return size to 8k    =%
      ::
%=      =%%#$lf%
%=      =%%#$cr%
%=      =%%#$n1c%
%=      =%%#$n2c%
%=      =%%#echo_%
%=      =%%#echon_%
%=      =%%#necho_%
%=      =%%#nechon_%
%=      =%%#n2echo_%
%=      =%%#pre_%
%=      =%%#post_%
%=      =%%#endoftest%
%=      =%%#forC_%
%=      =%%#forQ_%
%=      =%%#forLineR_%
%=      =%%#endlocalR_%
%=      =%%#macroStart_%
%=      =%%#macroEnd%
   )
:: )
%post_% Global return
:: (
   %n2echo_% Global $cr verification...

   setlocal enableDelayedExpansion &set "$defines=$var"
   :: (
      2>nul ( %macroStart_% enableDelayedExpansion )
      :: (
%=         =%set ^"$var=(%$n1c%
%=            =%!n2echo_! $cr failed ^^^!$cr^^^! $cr succes%$n1c%
%=         =%)"
      :: )
      %macroEnd%
      %endlocalR_% (
%=      =%%$%
      )
      ::
      %$var%
   :: )
   endlocal
:: )
:: --------------------------------------------------------------------------------------------------------------------------
::
goto :skip "()"
%endoftest%
:skip ()

:: )
%post_% offDelayed definitions
:: --------------------------------------------------------------------------------------------------------------------------

:: --------------------------------------------------------------------------------------------------------------------------
set "$defines=endlocal_"
:: --------------------------------------------------------------------------------------------------------------------------
:: last updated       : 09/04/2012
:: support            : naDelayed, no ( $cr, $lf ), ( encoded or regular escaped * )
:: Warn               : for efficiency, the number of endlocals is controlled by global $eCount !
::
set ^"$usage.%$defines%=^
 use: ( %%endlocal_%% #eCount, #var, #etc.. )%$n1c%
 err: Unaffected, panic otherwise"
::
2>nul ( %macroStart_% enableDelayedExpansion )
:: (
%=   =%set ^"!$defines!=!forQ_! (1,2) do if %%?==2 (%$n1c%

%=      =%set/a$eCount+=1^&if ^^^!$eCount^^^! lss 2 set $eCount=2%$n1c%
%=      =%set $=^&!forQ_! (^^^!?^^^!) do (set ?=^^^!%%~?^^^!^&if defined ? set ?=^^^!?:34#=3\4#^^^!%$n1c%
%=         =%set $=^^^!$^^^!,34#%%~?=^^^!?^^^!34#%$n1c%
%=      =%)%$n1c%
%=      =%set $=^^^!$:^^^"=""^^^!%=                     inner delay   =%%$n1c%
%=      =%set $=^^^!$:^^^"=34#^^^!%$n1c%
%=      =%set $=^^^!$:42=4\2^^^!^&set $=^^^!$:\*=42^^^!%=            encode 42   =%%$n1c%
%=      =%set $=^^^!$:94#=9\4#^^^!^&set "$=^!$:^^^=94#^!"^&set $=^^^!$:33#=3\3#^^^!^&call set "$=%%^^^$:^^^!=33#%%"^^^!^&set $=^^^!$:34#=^^^"^^^!%$n1c%
%=      =%set $=^^^!$:3\4#=34#^^^!^&set $=^^^!$:63=6/3^^^!^&set $=^^^!$:?=63^^^!%=   replace 63-?   =%%$n1c%
%=      =%for /f "delims=" %%r in ("^!$^!") do (!forC_! (1,1,^^^!$eCount^^^!) do endlocal%$n1c%
%=         =%set ?=^^^!^&!forQ_! (%%r) do (setlocal enableDelayedExpansion%=   outer delay   =%%$n1c%
%=            =%set $=%%~?^&set $=^^^!$:42=*^^^!^&set $=^^^!$:4\2=42^^^!%=   decode 42   =%%$n1c%
%=            =%set $=^^^!$:63=?^^^!^&set $=^^^!$:6/3=63^^^!^&call set "$=%%^^^$:33#=33#^^^!%%"^^^!%$n1c%
%=            =%if defined ? (set "$=^!$:94#=^^^!"^&set $=^^^!$:33#=^^^!)else set "$=^!$:94#=^^^^^!"^&set "$=^!$:33#=^^^!"%$n1c%
%=            =%set $=^^^!$:9\4#=94#^^^!^&set $=^^^!$:3\3#=33#^^^!^&set $=^^^!$:""=^^^"^^^!%$n1c%
%=            =%!forLineR_! ("^!$^!") do endlocal^&set "%%r"%$n1c%
%=         =%)%$n1c%
%=      =%)%$n1c%

%=   =%)else setlocal enableDelayedExpansion^&set ?="
:: )
2>nul %macroEnd%
%endlocalR_% (
%$%
)
setlocal disableDelayedExpansion
:: (
   setlocal enableDelayedExpansion
   :: (
      set "$var0=simple"
      set "$var1=\*\*\*\*\*\*"
      %necho#$_% $var0, $var1
   :: )
   %endlocal_% $var0, $var0, $var1
   %necho_% $var0=%$var0%_
   %necho_% $var1=%$var1%_

   set "$var=This ^Wo" rks !"

   setlocal
   :: (
      setlocal enableDelayedExpansion    &%n2echo_% $var=!$var!_ &endlocal

      setlocal disableDelayedExpansion
      :: (
         set "$verify=failed"
      :: )
      %endlocal_% $var

      2>nul set "$verify" &&%endoftest%

      setlocal enableDelayedExpansion    &%necho_% $var=!$var!_ &endlocal
   ::)
   endlocal

   setlocal
   :: (
      setlocal enableDelayedExpansion    &%n2echo_% $var=!$var!_ &endlocal

      setlocal enableDelayedExpansion
      :: (
         set "$verify=failed"
      :: )
      %endlocal_% $var

      2>nul set "$verify" &&%endoftest%

      setlocal enableDelayedExpansion    &%necho_% $var=!$var!_ &endlocal
   ::)
   endlocal
::)
endlocal
:: --------------------------------------------------------------------------------------------------------------------------
::
goto :skip "()"
%endoftest%
!necho_!?=^^^!?^^^!_%$n1c%
!necho_!$=^^^!$^^^!_%$n1c%
!necho_!r=%%r_%$n1c%
:skip ()

cls
echo.¯ '%$iFile%'
type "%$iFile%" &echo.
echo.® '%$iFile%'

more "%$iFile%" > "tmp.TXT"

for /f %%? in ( '2^>nul ^( ^< "%$iFile%" find.EXE /c /v "" ^)' ) do set "$end=%%?"

< "tmp.TXT" (

       set "c=" &%forC_% (

              1, 1, %$end%

       ) do   set "$=" &set /p "$=" &(

              set /a c += 1
              setlocal enabledelayedexpansion
              rem (
                     set "$i!c!=!$!"
              rem )
              %endlocal_% $i!c!
       )

       setlocal enabledelayedexpansion
       rem (
              set "$=" &%forC_% (

                     1,1,!c!

              ) do   %forQ_% (

                     "i%%~!"

              ) do   set "$=!$!!$%%~?!!$lf!"

              (<nul set /p =!$:~0,-1!)
       rem )
       endlocal

) > "%$oFile%"
set /a $end -= 1

echo.
echo.¯ '%$oFile%'
type "%$oFile%" &echo.
echo.® '%$oFile%'

echo.linefeeds[%$end%]
pause
exit
I copy entire code from this post and pasted to make sure you won't have problems with removed TABS. It didn't break luckily. :roll:

This amount of code, I know that's insane, it is based upon dBenhams safe return technique which is defined in disabled expansion, has low-coupling and is therefor much shorter. After all I only needed my Endlocal_ macro :?


11 Aug 2012 10:22
Profile WWW
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 32 posts ]  Go to page 1, 2, 3  Next


Who is online

Users browsing this forum: Bing [Bot], dbenham, Yahoo [Bot] and 19 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
Jump to:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Forum style by Vjacheslav Trushkin for Free Forums/DivisionCore.