Re: Métodos para contar las líneas de un archivo.
Publicado: 01 Sep 2011, 12:26
¡Lo he hecho bastante más rápido!
Es probable que este tema ya esté abandonado, pero como ahora estábamos resolviendo otra duda con expresiones regulares me he acordado de esto... ¿y no se puede hacer esto con expresiones regulares? ¿será más rápido que el más rápido conseguido hasta ahora?
¡Pues Sí y Sí!
¡Y además el código es ultracorto!
Por ejemplo el código más rápido era el de Chefito con su proceso todo en AutoIt. En mi ordendor tarda algo más de un segundo. Ahora es el doble de rápido
Y busca todas las soluciones, porque Chefito, parece que el tuyo se deja algunas ¿? creo que las que tienen llaves "{" y "}" en el nombre.
El código es este, en la primera línea hay que cambiar la carpeta donde están los archivos. Tal como está busca el nombre como subcadena, es decir, si se busca 'Mamba Edge' también encuentra 'Mamba Edge - Haste', por ejemplo. En realidad buscar el nombre exacto es más sencillo, os lo pongo después, pero como hasta ahora parece que buscabais subcadenas pues el inicial es este:
Así para 'Mamba Edge' en medio segundo me encuentra:
Si buscamos el nombre exacto es cosa de cambiar la expresión regular y la extracción de resultados con:
De todas maneras igual hay que buscar en todos los archivos porque hay items con exactamente el mismo nombre, por ejemplo para $txtBusc = "Artisan's Goggles" me encuentra dos:
Item:Artisan's Goggles
08100-08199.txt -> ID: 8186
22100-22199.txt -> ID: 22172
Es probable que este tema ya esté abandonado, pero como ahora estábamos resolviendo otra duda con expresiones regulares me he acordado de esto... ¿y no se puede hacer esto con expresiones regulares? ¿será más rápido que el más rápido conseguido hasta ahora?
¡Pues Sí y Sí!
¡Y además el código es ultracorto!
Por ejemplo el código más rápido era el de Chefito con su proceso todo en AutoIt. En mi ordendor tarda algo más de un segundo. Ahora es el doble de rápido
Y busca todas las soluciones, porque Chefito, parece que el tuyo se deja algunas ¿? creo que las que tienen llaves "{" y "}" en el nombre.
El código es este, en la primera línea hay que cambiar la carpeta donde están los archivos. Tal como está busca el nombre como subcadena, es decir, si se busca 'Mamba Edge' también encuentra 'Mamba Edge - Haste', por ejemplo. En realidad buscar el nombre exacto es más sencillo, os lo pongo después, pero como hasta ahora parece que buscabais subcadenas pues el inicial es este:
Código: Seleccionar todo
$dir = "C:\temp\items\"
$hBusq = FileFindFirstFile($dir & "*.txt")
If $hBusq = -1 Then
MsgBox(16, "Error buscando archivos", "No se encontraron los archivos TXT en la carpeta: " & @CRLF & $dir)
Exit
EndIf
;$txtBusc = 'Short Sword' ;el primero
;$txtBusc = 'Diadem' ; el medio
;$txtBusc = 'Rabbit Ear' ;el último
$txtBusc ='Mamba Edge'
While 1
$nomFich = FileFindNextFile($hBusq)
If @error Then ExitLoop ; Se han acabado los archivos
$texto=FileRead($dir & $nomFich)
If @error Then
MsgBox(0, "Error", "Error leyendo: " & @CRLF & $nomFich)
Exit
EndIf
$res = StringRegExp($texto, '(?U)<item id="(.*)".*name="(.*' & $txtBusc & '.*)">', 3)
For $i = 0 To UBound($res)/2-1
ConsoleWrite($nomFich & " -> ID: " & $res[$i*2] & " - NOMBRE: " & $res[$i*2+1] & @CRLF)
Next
WEnd
FileClose($hBusq)
Código: Seleccionar todo
15500-15599.txt -> ID: 15545 - NOMBRE: Mamba Edge
15800-15899.txt -> ID: 15874 - NOMBRE: Mamba Edge - Haste
15800-15899.txt -> ID: 15875 - NOMBRE: Mamba Edge - Crt. Damage
15800-15899.txt -> ID: 15876 - NOMBRE: Mamba Edge - HP Drain
15900-15999.txt -> ID: 15914 - NOMBRE: Mamba Edge {PvP}
15900-15999.txt -> ID: 15986 - NOMBRE: Mamba Edge {PvP} - Haste
15900-15999.txt -> ID: 15987 - NOMBRE: Mamba Edge {PvP} - Crt. Damage
15900-15999.txt -> ID: 15988 - NOMBRE: Mamba Edge {PvP} - HP Drain
16100-16199.txt -> ID: 16156 - NOMBRE: Mamba Edge Dual Daggers
16100-16199.txt -> ID: 16157 - NOMBRE: Mamba Edge Dual Daggers {PvP}
Código: Seleccionar todo
$res = StringRegExp($texto, '(?U)<item id="(.*)".*name="' & $txtBusc & '">', 3)
For $i = 0 To UBound($res)-1
ConsoleWrite($nomFich & " -> ID: " & $res[$i] & @CRLF)
Next
Item:Artisan's Goggles
08100-08199.txt -> ID: 8186
22100-22199.txt -> ID: 22172