Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: z_ane_666 en 17 Junio 2013, 22:51 pm



Título: [BATCH]limite en el tamaño de lineas
Publicado por: z_ane_666 en 17 Junio 2013, 22:51 pm
El siguiente codigo almacena cada linea de un archivo pasado como primer argumento en archivos con nombres numericos:
Código:
@echo off
setlocal enableextensions enabledelayedexpansion
set dirvar=%~d0%~p0%~n0.%~n1%~x1
mkdir "%dirvar%"
set seleccion=%1
set /A x=0
for /f "delims=" %%a in (%seleccion%) do (
echo %%a>"%dirvar%\!x!"
set /A x+=1
echo !x!
)
endlocal
pause

Pero si le paso un archivo que contenga lineas con un tamaño superior a cierta cantidad(creo que superior a 9000 o lo mismo 9kb) de caracteres el codigo deja de funcionar o no guarda esas lineas, quisiera algun consejo, que puedo hacer?  :-[ :huh:


Título: Re: [BATCH]limite en el tamaño de lineas
Publicado por: Eleкtro en 18 Junio 2013, 02:52 am
El problema que tienes es con el número total de líneas, ¿o con la longitud de la linea?

Si es lo primero, prueba así (testeado con 100.000 lineas):

Código
  1. @echo off
  2. setlocal enabledelayedexpansion
  3.  
  4. set "dirvar=%~dpn0.%~nx1"
  5. mkdir "%dirvar%"
  6.  
  7. for /f "usebackq delims=" %%a in ("%1") do (
  8. set /A x+=1
  9. echo Linea !x!
  10. echo %%a>"%dirvar%\!x!"
  11. )
  12.  
  13. Pause&Exit


En caso de ser lo segundo, no hay solución, Batch es limitado y no puede leer/almacenar más hallá de una linea de 8.191 caracteres de longitud, es decir 8191 bytes,
la solución sería usar otro lenguaje.

EDITO:
Aquí tienes una información adicional que di en "X" sitio en inglés, para que de verdad no hagas intentos en vano:

Cita de: Elektro H@cker
You can't break a limitation of the OS, you can't break the 255 chars path in Windows, and you can't break the CMD interpreter lenght limitation, simply as that!

Sorry but you can't store that line into a var, no way, don't exist any magic, computers are logical.

But it's not the end of the world, you can do it so easy in any other lenguage, I recommend you Ruby or python (Ruby for that), it's an easy job, open a file, store the content into a var, and then do what you want, don't need any experience for that, if you need a example just comment this.

Saludos!


Título: Re: [BATCH]limite en el tamaño de lineas
Publicado por: z_ane_666 en 22 Junio 2013, 08:03 am
El problema que tienes es con el número total de líneas, ¿o con la longitud de la linea?

Si es lo primero, prueba así (testeado con 100.000 lineas):

Código
  1. @echo off
  2. setlocal enabledelayedexpansion
  3.  
  4. set "dirvar=%~dpn0.%~nx1"
  5. mkdir "%dirvar%"
  6.  
  7. for /f "usebackq delims=" %%a in ("%1") do (
  8. set /A x+=1
  9. echo Linea !x!
  10. echo %%a>"%dirvar%\!x!"
  11. )
  12.  
  13. Pause&Exit


En caso de ser lo segundo, no hay solución, Batch es limitado y no puede leer/almacenar más hallá de una linea de 8.191 caracteres de longitud, es decir 8191 bytes,
la solución sería usar otro lenguaje.

EDITO:
Aquí tienes una información adicional que di en "X" sitio en inglés, para que de verdad no hagas intentos en vano:

Saludos!

Exactamente, mi problema era la longitud de linea.

estoy reescribiendo el script en perl, saludos


Título: Re: [BATCH]limite en el tamaño de lineas
Publicado por: zikotik en 4 Julio 2013, 22:23 pm
Yo conozco el siguiente método...

Código:
@echo off
setlocal enabledelayedexpansion
set len=0
set max=20

set texto=hasta 20 caracteres.
set "texto=%text: =_%"

:read
if not "!texto:~%len%,1!"== "" (
  set /a len+=1
  goto read
)

if %texto% GTR %max% (has pasado el limite de 20 caracteres.)

pause>nul

No digo que sea mejor ni nada por el estilo, pero es otra variante.