elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  [BATCH]limite en el tamaño de lineas
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [BATCH]limite en el tamaño de lineas  (Leído 3,075 veces)
z_ane_666

Desconectado Desconectado

Mensajes: 64


Ver Perfil
[BATCH]limite en el tamaño de lineas
« 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:


« Última modificación: 17 Junio 2013, 23:01 pm por z_ane_666 » En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.810



Ver Perfil
Re: [BATCH]limite en el tamaño de lineas
« Respuesta #1 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!


« Última modificación: 18 Junio 2013, 03:01 am por EleKtro H@cker » En línea

z_ane_666

Desconectado Desconectado

Mensajes: 64


Ver Perfil
Re: [BATCH]limite en el tamaño de lineas
« Respuesta #2 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
En línea

zikotik

Desconectado Desconectado

Mensajes: 59



Ver Perfil
Re: [BATCH]limite en el tamaño de lineas
« Respuesta #3 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.
« Última modificación: 5 Julio 2013, 19:51 pm por zikotik » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines