Acciones sobre archivos de texto. [Batch]

Iniciado por leogtz, 24 Enero 2009, 00:30 AM

0 Miembros y 1 Visitante están viendo este tema.

M_A_R_T_I_N

Cita de: Leo Gutiérrez. en 14 Marzo 2010, 17:09 PM
Cita de: xassiz en 14 Marzo 2010, 14:28 PM
Añade "^" antes del carácter.

Para EDLIN no es válido.

Hola, abria alguna manera de hacerlo o bien de borrar las comillas despues de reemplazado el texto?
Muchas Gracias.

wajagaum

#51
ho la tengo un archio .qrp lo edito con notepad. quisiera saber si con el batch yo puedo mostrar un nuemro que esta dentro del archivo y  pedir un nuevo nuemro en pantalla y el archivo bat busque dentro del archivo .qrp los que hayan y reemplazarlo por el pedido en pantalla.

texto:

Begin Column
  FieldName = "Promedio"
  DrillDownFieldName = ""
  DrillDownReportName = ""
  StoreIDFieldName = ""
  Title = "Promedio"
  VBDataType = vbDouble
  Formula = "SUM(TransactionEntry.Quantity)/3"
  ColHidden = False
  ColNotDisplayable = False
  FilterDisabled = False
  ColWidth = 990
  GroupMethod = groupmethodNone
  ColFormat = "#"
  ColAlignment = flexAlignLeftCenter
End Column

Begin Column
  FieldName = "VtaPromedio"
  DrillDownFieldName = ""
  DrillDownReportName = ""
  StoreIDFieldName = ""
  Title = "Venta Prom"
  VBDataType = vbCurrency
  Formula = "SUM(TransactionEntry.Price * (TransactionEntry.Quantity/3))"
  ColHidden = False
  ColNotDisplayable = False
  FilterDisabled = False
  ColWidth = 1425
  GroupMethod = groupmethodSum
  ColFormat = ""
End Column




y quiero mestrar "/3" y pedir otro numero por ejemplo "/n" y reemplazarlo.

te agradecia mucho tu ayuda.

leogtz

Cita de: M_A_R_T_I_N en 14 Marzo 2010, 23:01 PM
Cita de: Leo Gutiérrez. en 14 Marzo 2010, 17:09 PM
Cita de: xassiz en 14 Marzo 2010, 14:28 PM
Añade "^" antes del carácter.

Para EDLIN no es válido.

Hola, abria alguna manera de hacerlo o bien de borrar las comillas despues de reemplazado el texto?
Muchas Gracias.

Con edlin vas a seguir teniendo problemas.

Así que te recomiendo sed para Windows, con una expresión regular bastaría.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

leogtz

@wajagaum

¿Cambiar estas líneas?

   Formula = "SUM(TransactionEntry.Quantity)/3"
   Formula = "SUM(TransactionEntry.Price * (TransactionEntry.Quantity/3))"


Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

leogtz

Si es lo que querías, te tengo esta respuesta:

Supongamos que tenemos el archivo siguiente(yo lo llamé "file.txt":

Begin Column
   FieldName = "Promedio"
   DrillDownFieldName = ""
   DrillDownReportName = ""
   StoreIDFieldName = ""
   Title = "Promedio"
   VBDataType = vbDouble
   Formula = "SUM(TransactionEntry.Quantity)/3"
   ColHidden = False
   ColNotDisplayable = False
   FilterDisabled = False
   ColWidth = 990
   GroupMethod = groupmethodNone
   ColFormat = "#"
   ColAlignment = flexAlignLeftCenter
End Column

Begin Column
   FieldName = "VtaPromedio"
   DrillDownFieldName = ""
   DrillDownReportName = ""
   StoreIDFieldName = ""
   Title = "Venta Prom"
   VBDataType = vbCurrency
   Formula = "SUM(TransactionEntry.Price * (TransactionEntry.Quantity/3))"
   ColHidden = False
   ColNotDisplayable = False
   FilterDisabled = False
   ColWidth = 1425
   GroupMethod = groupmethodSum
   ColFormat = ""
End Column


Lo trabajaremos sin espacios, para no tener conflicto con los ciclos FOR.

El script que hice, cuenta las ocurrencias, y te va pidiendo qué escribir en la línea en donde se dió la ocurrencia, algo así:


C:\>lala.bat
1 : leito
2 : gutierrez

Begin Column
   FieldName = "Promedio"
   DrillDownFieldName = ""
   DrillDownReportName = ""
   StoreIDFieldName = ""
   Title = "Promedio"
   VBDataType = vbDouble
   Formula = "SUM(TransactionEntry.Quantity)/leito"
   ColHidden = False
   ColNotDisplayable = False
   FilterDisabled = False
   ColWidth = 990
   GroupMethod = groupmethodNone
   ColFormat = "#"
   ColAlignment = flexAlignLeftCenter
End Column
Begin Column
   FieldName = "VtaPromedio"
   DrillDownFieldName = ""
   DrillDownReportName = ""
   StoreIDFieldName = ""
   Title = "Venta Prom"
   VBDataType = vbCurrency
   Formula = "SUM(TransactionEntry.Price * (TransactionEntry.Quantity/gutierrez))"
   ColHidden = False
   ColNotDisplayable = False
   FilterDisabled = False
   ColWidth = 1425
   GroupMethod = groupmethodSum
   ColFormat = ""
End Column

C:\>


En este caso solo me pidió de 1 a 2, porque solo hubo dos ocurrencias de tipo: /3.

Aquí está el script:
Código (dos) [Seleccionar]

@echo off
setlocal enabledelayedexpansion
set /a "count=0"
for /f "tokens=1" %%_ in ('type "file.txt" ^| findstr /v "^$" ^| findstr /r /i /n ".*\/[0-9]" ^| find /v /c ""') do (
set "n_numbers=%%_";
)
set /a count=1
for /f "tokens=1 delims=:" %%a in ('type "file.txt" ^| findstr /v "^$" ^| findstr /r /i /n ".*\/[0-9]"') do (
set "ocurrencia[!count!]=%%a";
set /a count+=1
)
:code
for /l %%_ in (1, 1, %n_numbers%); do (
set /p "string_c[%%_]=%%_ : ";
if not defined string_c[%%_] (goto:code)
);
echo.
for /f "tokens=1" %%_ in ('type "file.txt" ^| findstr /r /v "^$" ^| find /v /c ""') do (
set "n_lines=%%_"
)
set /a n_lines+=1
set /a count=1
set /a count_str=1
set /a i=1
:show
if !count! equ !n_lines! (goto:eof) else (
if !count! equ !ocurrencia[%i%]! (set /a "i+=1")
findstr /v /r "^$" file.txt | sed -n "!count!p" | sed "s/\/[0-9]*/\/!string_c[%i%]!/g"
)
set /a count+=1
goto:show


Por cierto, necesitas sed para Windows, hacerlo con windows solamente sería un engorro.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

wajagaum

Brothers te cuento que no funciona solo ejecuto el bat, me pide los valores pero no actualiza a los nuevos escritos en pantalla que debo hacer.  :D

leogtz

Cita de: wajagaum en 19 Marzo 2010, 21:16 PM
Brothers te cuento que no funciona solo ejecuto el bat, me pide los valores pero no actualiza a los nuevos escritos en pantalla que debo hacer.  :D

Ponme el script que estás usando, el archivo de texto que quieres editar, dime que es exactamente que es lo que quieres editar y si puedes ponme una captura de pantalla.

El script lo he probado y a mi sí me funciona.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

wajagaum

ok mira, lo que yo quiero es que un bat, me muestre que numero hay en la fila # x y en la fila #, Y que pida reemplazarlo por un numero nuevo y lo reemplce:

el texto es este mira...
nota: no es .txt es .qrp


Mi caso es que quiero que me muestre que numero hay despues del / que son la cantidad de meses y cuando me toque cambiarlo me muestre cuantos meses hay y pueda cambiarlo a lli mismo.


//--- Report Summary --- //

Begin ReportSummary
   ReportType = reporttypeSales
   ReportTitle = "Reporte Ventas Compras"
   PageOrientation = pageorientationPortrait
   WordWrap = False
   ShowDateTimePicker = True
   OutLineMode = True
   Groups = 0
   GroupDescription = ""
   DisplayLogo = True
   LogoFileName = "Walter Galvez"
   ProcedureCall = ""
   PreQuery1 = ""
   PreQuery2 = ""
   TablesQueried = <BEGIN>

      FROM        TransactionEntry WITH(NOLOCK) 
      INNER JOIN  [Transaction] WITH(NOLOCK)
                  ON TransactionEntry.TransactionNumber = [Transaction].TransactionNumber
                  AND TransactionEntry.StoreID = [Transaction].StoreID
      LEFT JOIN   Item WITH (NOLOCK)
                  ON TransactionEntry.ItemID = Item.ID
      LEFT JOIN   Department WITH(NOLOCK)
                  ON Item.DepartmentID = Department.ID
      LEFT JOIN   Category WITH(NOLOCK)
                  ON Item.CategoryID = Category.ID
      LEFT JOIN   Supplier WITH(NOLOCK)
                  ON Item.SupplierID = Supplier.ID
      LEFT JOIN   WGPadres WITH(NOLOCK)
        ON Item.ParentItem = WGPadres.Id
      LEFT JOIN   WGQtyCD WITH(NOLOCK)
        ON Item.Id = WGQtyCD.ItemId
      LEFT JOIN   Store ON TransactionEntry.StoreID = Store.ID

<END>
   SelCriteria = ""
   GroupBy = "Item.ItemLookupCode"
   SortOrder = "Depto, ItemDescription"
End ReportSummary


//--- Title Rows ---//

Begin TitleRow
   Text = "<Store Name>"
   Font = "Arial"
   FontBold = True
   FontSize = 16
   Color = "Blue"
End TitleRow

Begin TitleRow
   Text = "<Report Title>"
   Font = "Arial"
   FontBold = True
   FontSize = 12
   Color = "Black"
End TitleRow

Begin TitleRow
   Text = "Generated On <Report Date>"
   Font = "Arial"
   FontBold = True
   FontSize = 10
   Color = "Black"
End TitleRow


//--- Filters ---//

Begin Filter
   FieldName = "[Transaction].Time"
   FilterOp = reportfilteropBetween
   FilterLoLim = "15/01/2010"
   FilterHilim = "16/03/2010"
   FilterNegated = False
   FilterConnector = reportfilterbooleanconAND
End Filter


//--- Columns ---//

Begin Column
   FieldName = "Promedio"
   DrillDownFieldName = ""
   DrillDownReportName = ""
   StoreIDFieldName = ""
   Title = "Promedio"
   VBDataType = vbDouble
   Formula = "SUM(TransactionEntry.Quantity)/3"
   ColHidden = False
   ColNotDisplayable = False
   FilterDisabled = False
   ColWidth = 990
   GroupMethod = groupmethodNone
   ColFormat = "#"
   ColAlignment = flexAlignLeftCenter
End Column

Begin Column
   FieldName = "VtaPromedio"
   DrillDownFieldName = ""
   DrillDownReportName = ""
   StoreIDFieldName = ""
   Title = "Venta Prom"
   VBDataType = vbCurrency
   Formula = "SUM(TransactionEntry.Price * (TransactionEntry.Quantity/3))"
   ColHidden = False
   ColNotDisplayable = False
   FilterDisabled = False
   ColWidth = 1425
   GroupMethod = groupmethodSum
   ColFormat = ""
End Column

M_A_R_T_I_N

Cita de: Leo Gutiérrez. en 18 Marzo 2010, 23:39 PM
Cita de: M_A_R_T_I_N en 14 Marzo 2010, 23:01 PM
Cita de: Leo Gutiérrez. en 14 Marzo 2010, 17:09 PM
Cita de: xassiz en 14 Marzo 2010, 14:28 PM
Añade "^" antes del carácter.

Para EDLIN no es válido.

Hola, abria alguna manera de hacerlo o bien de borrar las comillas despues de reemplazado el texto?
Muchas Gracias.

Con edlin vas a seguir teniendo problemas.

Así que te recomiendo sed para Windows, con una expresión regular bastaría.


1000 Gracias!!! Funciona ok!!!

KamuiDNA

Hola, tengo una duda, realize un proceso en Batch que me efectua el despliegue de datos de una base de lluvia por dia,  el proceso funciona bien  y esta probado en windows vista y XP, pero al montarlo en windows server 2003 este solo ejecuta la mitad del programa y lo cierra, no me marca ningun error ni nada, solo hace como que lo ejecuta pero no ejecuta todo el proceso, alguna idea o sugerencia.