Ms-Dos - Un bat que copie solo las filas de registros de un txt que coincidan con la busqueda

   
Vista:

Un bat que copie solo las filas de registros de un txt que coincidan con la busqueda

Publicado por Sebastian (18 intervenciones) el 27/07/2012 01:41:32
Amigos.

Por favor, alguien pueda ayudarme en este tema, yo no conosco mucho de DOS pero si he podido ver que se puede hacer lo que necesito con find.

Les explico.

Tengo un archivo TXT que esta estructurado por 20 columnas y 200 registros, una de sus columnas contiene el campo codigo del cliente.

lo que necesito elaborar en DOS es un bat que primero me pida ingresar el codigo de cliente para que luego con un enter recorra los 200 registros y solo copie los registros para postiormente llevarlos a un txt nuevo llamado clientes_separados.txt.

Por favor, de ante mano gracias por su ayuda
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
información
Otras secciones de LWP con contenido de Ms-Dos
- Cursos de Ms-Dos
- Temas de Ms-Dos
información
Cursos y Temas de Ms-Dos
- MS-DOS knowledge base articles
- Manual MS-DOS
- Comandos internos en MS-DOS

Un bat que copie solo las filas de registros de un txt que coincidan con la busqueda

Publicado por Sebastian (18 intervenciones) el 29/07/2012 02:29:52
He encontrado algo parecido dentro del foro que pense me iba ayudar.
Sin embargo cuando modifique agregandole el codigo de cliente "4545454", el DOS me da un mensaje que dice :
"la sintaxis del comando no es correcta" y "no se esperaba | en este momento"

@echo OFF
for /f "tokens=*" %%A in (clientes.txt) do (ECHO %%A |findstr /I /V "4545454")>>ACTIVOS.txt

Mi archivo clientes.txt tiene esta estructura, de la cual deveria de copiar solo 2 filas por el cod_cliente "4545454".

2012.07.26
---------------------------------------
---------------------------------------
| FECHA CONTABIL|CODIGO CLIENTE|CALLES|
---------------------------------------
| 2012.07.26 |4545455 |SUR |
| 2012.07.26 |65875412 |NORT |
| 2012.07.26 |98654872 |ESTE |
| 2012.07.26 |4545454 |OEST |
| 2012.07.26 |98566555 |NORT |
| 2012.07.26 |4545454 |SUR |
---------------------------------------
|* | | |
---------------------------------------

La pagina en la que vi este codigo de DOS es:
http://www.lawebdelprogramador.com/foros/Ms-Dos/1322404-Eliminar_registros_por_un_condicion_en_un_archivo_txt_desde_un_bat.html

Por favor, estare atentos a su colaboracion
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana

Un bat que copie solo las filas de registros de un txt que coincidan con la busqueda

Publicado por Antoni Masana (269 intervenciones) el 31/07/2012 07:05:56
Si entiendo bien lo que deseas hacer es algo asi:

1
2
3
@echo off
set /P codi=Codigo cliente:
IF NOT "%codi%" == "" FIND "%codi%" cliente.txt >Activos.txt


Para ser un poco mas precisos puedes poner los sepadadores de campo para ajustar la busquera:

1
2
3
@echo off
set /P codi=Codigo cliente:
IF NOT "%codi%" == "" FIND "|%codi%|" cliente.txt >Activos.txt
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana

Un bat que copie solo las filas de registros de un txt que coincidan con la busqueda

Publicado por Antoni Masana (269 intervenciones) el 31/07/2012 11:14:07
En los ejemplos hay un pequeño error.

Es mejor usar el FINDSTR

1
2
3
@echo off
set /P codi=Codigo cliente:
IF NOT "%codi%" == "" FINDSTR "%codi%" cliente.txt >Activos.txt


1
2
3
@echo off
set /P codi=Codigo cliente:
IF NOT "%codi%" == "" FINDSTR "|%codi%|" cliente.txt >Activos.txt


NOTA - 1: Si solo son numeros no necesitas el /I

NOTA - 2: Si pones en /V copia los registro que NO tienen el codigo.


Ayuda del FINDSTR

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
C:\LWP>findstr /?
Busca cadenas en los archivos.
 
FINDSTR [/B] [/E] [/L] [/R] [/S] [/I] [/X] [/V] [/N] [/M] [/O] [/P]
[/F:archivo]
   [/C:cadena] [/G:archivo] [/D:lista de directorios] [/A:atributos de color] [/
OFF[LINE]]
   [cadenas] [[unidad:][ruta]nombredearchivo[ ...]]
 
  /B        Hace coincidir los modelos si están al principio de la línea.
  /E        Hace coincidir los modelos si están al final de la línea.
  /L        Literalmente utiliza cadenas de búsqueda.
  /R        Utiliza cadenas de búsqueda como expresiones regulares.
  /S        Busca archivos que coinciden en el directorio actual y en todos
            los subdirectorios.
  /I        Especifica que la búsqueda no distingue mayúsculas de minúsculas.
  /X        Imprime líneas que coinciden con exactitud.
  /V        Sólo imprime líneas que no contienen una correspondencia.
  /N        Imprime el número de la línea antes de la línea que coincide.
  /M        Sólo imprime el nombre de archivo si el archivo contiene una
            correspondencia.
  /O        Imprime un carácter de desplazamiento antes de las líneas que
            coinciden.
  /P        Omite archivos con caracteres que no son imprimibles
  /OFFLINE  No omite archivos con el atributo "sin conexión" establecido.
  /A:attr   Especifica atributos de color con dos dígitos hexadecimales. Ver
            "color /?"
  /F:archivo  Lee la lista de archivos desde el archivo especificado
            (/ significa consola).
  /C:cadena   Utiliza una cadena especificada como una búsqueda de cadena
            literal.
  /G:archivo  Toma la búsqueda de archivos desde el archivo especificado
            (/ significa consola).
  /D:dir    Busca un signo de punto y coma de la lista delimitada de
            directorios
  cadenas   Texto que se debe buscar.
  [unidad:][ruta]nombredearchivo
            Especifica un archivo o  archivos que buscar.
 
Utiliza espacios para separar múltiples cadenas de búsqueda a no ser que
el argumento lleve un prefijo con /C.  Por ejemplo, 'FINDSTR "qué tal" x.y'
busca "qué" o "tal" en el archivo x.y.  'FINDSTR /C:"qué tal" x.y' busca
"qué tal" en el archivo x.y.
 
Expresión regular de referencia rápida:
  .        Comodín: cualquier carácter
  *        Repetir: cero o más ocurrencias de un carácter previo o de clase
  ^        Posición de línea: comienzo de la línea
  $        Posición de línea: fin de línea
  [clase]  Clase de carácter: cualquier carácter en la serie
  [^class] Clase inversa: cualquier carácter que no esté en la serie
  [x-y]    Intervalo: cualquier carácter que esté dentro del intervalo
           especificado
  \x       Escape: uso literal de un metacarácter x
  \<xyz    Posición de palabra: principio de palabra
  xyz\>    Posición de palabra: fin de palabra
 
Para obtener una información más completa sobre expresiones regulares de
FINDSTR referirse al Comando de referencia Command en línea.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Un bat que copie solo las filas de registros de un txt que coincidan con la busqueda

Publicado por Sebastian (18 intervenciones) el 02/08/2012 00:23:54
Exelente, Antoni me salvaste..

@echo off
set /P codi=Codigo cliente:
IF NOT "%codi%" == "" FINDSTR "%codi%" cliente.txt >Activos.txt

Si no es mucho pedir, aunque en verdad ya me ayudaste mucho; existira la forma de que cuando se copie al archivo.txt se pueda modificar la delimitacion a entre comillas.

Asi:

| 2012.07.26 |4545455 |SUR |


" 2012.07.26 "4545455 "SUR "

Gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana

Un bat que copie solo las filas de registros de un txt que coincidan con la busqueda

Publicado por Antoni Masana (269 intervenciones) el 02/08/2012 06:47:13
El MS-DOS es un mal gestor de ficheros, no malo no es la palabra correcta, malisimo se acerca un poco mejor.

No existe ningun comando nativo en para reemplazar caracteres que yo sepa.

En unix hay un comando que sirve para esto y se llama sed

Sintaxis

1
sed "s/bad/good/g" Archivo-1.txt >Archivo-2.txt


Busca en google si existe un sed.exe o sed.com para MS-DOS

Hay gente que ha realizados programas para MS-DOS que son copias de comandos UNIX que estan mejor que muchos de los comandos de Microsoft.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Un bat que copie solo las filas de registros de un txt que coincidan con la busqueda

Publicado por Allan (1 intervención) el 05/05/2013 05:46:05
Y como se podria hacer esto mismo pero leyendo todos los archivos que se encuentren en una carpeta determinada y a cada uno lo cree en otro archivo con el mismo nombre del original pero en otra carpeta?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar