Jayakrishnan
Jayakrishnan

Reputation: 1335

whitespace to newline in batchfile (windows)

i want to convert every whitespace in input to a new line character and save to a file (say tmp.txt) with batch file windows .
input:

http://www.example1.com   wwwexample2com   wwwexample3com   wwwexample4com

to output in tmp.txt :

http://www.example1.com
wwwexample2com
wwwexample3com
wwwexample4com

how do I do that?

Upvotes: 0

Views: 1236

Answers (2)

dbenham
dbenham

Reputation: 130819

The following pure batch script will put each space delimited "word" onto a separate line in the output. Empty lines will be stripped. The script is very robust. It should handle any ASCII text as long as every source line is <8kb. Note this will not convert other whitespace characters like tab into newlines.

@echo off
setlocal disableDelayedExpansion

>"input.txt.new" (
  for /f "usebackq eol= tokens=* delims= " %%A in ("input.txt") do (
    set "ln=%%A"
    setlocal enableDelayedExpansion
    echo(!ln: =^

!%= This line and the empty line above must remain exactly as written=%
    endlocal
  )
)
findstr . "input.txt.new" >"output.txt"
del "input.txt.new"

type output.txt

However, I would not use the above because I think pure batch makes text manipulation overly complex.

I would use a regular expression text processing utility called JREPL.BAT. It is pure script (hybrid JScript/batch) that runs natively on any Windows machine from XP onward. It is much simpler, faster, and more robust than any pure batch solution. The utility is extensively documented, and there are many regular expression tutorials available on the web.

The following one liner will efficiently put each whitespace delimtted "word" onto a separate line in the output.

jrepl "\S+" "$0" /jmatch /f "input.txt" /o "output.txt"

If you really want to convert every whitespace character into a newline, as you say in your comment, then you could use the following. But I don't think it is really what you want.

jrepl "\s" "\n" /x /f "input.txt" /o "output.txt"

Upvotes: 2

woxxom
woxxom

Reputation: 73526

If the input is a file named "input file.txt" and the urls contain "=":

@echo off
setlocal enableDelayedExpansion

>"output file.txt" (for /f "usebackq delims=" %%a in ("input file.txt") do (
    set line=%%a
    call :listtokens "!line: =" "!"
))
pause & exit

:listtokens
    if .%1==. (exit /b) else (echo %~1 & shift & goto listtokens)

If the input is a variable with alphanumeric words:

>"output file.txt" (for %%a in (%VARIABLE%) do echo %%a)

If the input is a file named "input file.txt" with alphanumeric words:

>"output file.txt" (for /f "usebackq delims=" %%a in ("input file.txt") do (
    for %%b in (%%a) do echo %%b
))

If it's from a console utility that outputs alphanumeric words:

>"output file.txt" (for /f "delims=" %%a in ('run some command') do (
    for %%b in (%%a) do echo %%b
))

Upvotes: 2

Related Questions