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

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  [RETO] Obtener nombre de archivo
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 3 4 Ir Abajo Respuesta Imprimir
Autor Tema: [RETO] Obtener nombre de archivo  (Leído 12,197 veces)
Psyke1
Wiki

Desconectado Desconectado

Mensajes: 1.089



Ver Perfil WWW
[RETO] Obtener nombre de archivo
« en: 13 Febrero 2011, 19:54 pm »

Un reto fácil, en el que creo que puede participar mucha gente. :)
Consiste en obtener el nombre de archivo a partir de una ruta, así:

Código:
C:\Documents and Settings\Llamazares\Mis documentos\Downloads\SexoDeRanas.avi
Deberia devolver la función:
Código:
SexoDeRanas.avi

Quien sea más rápido, gana. ;)
Se testeará con cFrogContest.cls :P

DoEvents! :P


En línea

ignorantev1.1


Desconectado Desconectado

Mensajes: 617


/\ Así acabo cuando quiero programar...


Ver Perfil WWW
Re: [RETO] Obtener nombre de archivo
« Respuesta #1 en: 13 Febrero 2011, 20:03 pm »

Código
  1. Function getFileName(ByVal path As String) As String
  2.    Dim cM As Integer
  3.    cM = InStrRev(path, "\") + 1
  4.    If cM = 0 Then Exit Function
  5.    getFileName = Mid(path, cM)
  6. End Function
  7.  


En línea

seba123neo
Moderador
***
Desconectado Desconectado

Mensajes: 3.621


"No quiero creer, quiero saber" - Carl Sagan


Ver Perfil WWW
Re: [RETO] Obtener nombre de archivo
« Respuesta #2 en: 13 Febrero 2011, 20:08 pm »

Código
  1. Private Declare Sub PathStripPath Lib "shlwapi.dll" Alias "PathStripPathA" (ByVal pszPath As String)
  2.  
  3. Public Function StripPath(ByVal sPath As String) As String
  4.   Call PathStripPath(sPath)
  5.   StripPath = sPath
  6. End Function
  7.  
En línea

La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson
seba123neo
Moderador
***
Desconectado Desconectado

Mensajes: 3.621


"No quiero creer, quiero saber" - Carl Sagan


Ver Perfil WWW
Re: [RETO] Obtener nombre de archivo
« Respuesta #3 en: 13 Febrero 2011, 20:34 pm »

la api es una de las mas compactas, pero es la mas lenta, aca paso una optimizacion de la que puso ignorantev1.1 , es unos 300 milisegundos mas rapida.

Código
  1. Function getFileName(ByVal path As String) As String
  2.    getFileName = Mid$(path, InStrRev(path, "\") + 1)
  3. End Function
En línea

La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson
79137913


Desconectado Desconectado

Mensajes: 1.169


4 Esquinas


Ver Perfil WWW
Re: [RETO] Obtener nombre de archivo
« Respuesta #4 en: 13 Febrero 2011, 20:45 pm »

HOLA!!!

No tengo el VB aca asi que solo dejo el codigo(sin testear):
Código
  1. Private Declare Function GetFileTitle Lib "comdlg32.dll" Alias "GetFileTitleA" (ByVal lpszFile As String, ByVal lpszTitle As String, ByVal cbBuf As Integer) As Integer
  2.  
  3. Private Function Fn7913(sPath As String) As String
  4.     Dim Mem As String
  5.     Mem = String(255, 0)
  6.     GetFileTitle sPath, Mem, 255
  7.     Fn7913 = Trim(Mem)
  8. End Function

GRACIAS POR LEER!!!
En línea

"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!"
"La peor de las ignorancias es no saber corregirlas"

 79137913                          *Shadow Scouts Team*
grester43hck

Desconectado Desconectado

Mensajes: 57


Ver Perfil
Re: [RETO] Obtener nombre de archivo
« Respuesta #5 en: 13 Febrero 2011, 20:55 pm »

Código
  1. Function nombre_archivo(ByVal Ruta As String) As String
  2. Dim partes() As String
  3. partes = Split(Ruta, "\")
  4. nombre_archivo = partes(UBound(partes))
  5. End Function

Seguramente no es la mas rapida ni por asomo xD
« Última modificación: 13 Febrero 2011, 20:56 pm por grester43hck » En línea

seba123neo
Moderador
***
Desconectado Desconectado

Mensajes: 3.621


"No quiero creer, quiero saber" - Carl Sagan


Ver Perfil WWW
Re: [RETO] Obtener nombre de archivo
« Respuesta #6 en: 13 Febrero 2011, 21:01 pm »

Seguramente no es la mas rapida ni por asomo xD

no, es lentisima  ;D

las 2 mas rapidas hasta ahora es la segunda que puse yo y la de 79137913, a veces una dura mas y la otra menos, esta en la pelea.
En línea

La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson
ignorantev1.1


Desconectado Desconectado

Mensajes: 617


/\ Así acabo cuando quiero programar...


Ver Perfil WWW
Re: [RETO] Obtener nombre de archivo
« Respuesta #7 en: 13 Febrero 2011, 21:09 pm »

Esta pregunta la he hecho unas 450 veces pero se me olvida  :-[

Como medimos la velocidad?

@seba123neo
Jajajajaja te barriste con tu segunda funcion  ;-)
En línea

Psyke1
Wiki

Desconectado Desconectado

Mensajes: 1.089



Ver Perfil WWW
Re: [RETO] Obtener nombre de archivo
« Respuesta #8 en: 13 Febrero 2011, 21:10 pm »

La mía:
Código
  1. Public Static Function GetFileMrFrog(ByRef sFile As String) As String
  2.    GetFileMrFrog = RightB$(sFile, LenB(sFile) - InStrB(sFile, "\") - 1)
  3. End Function

@ignorantev1.1
http://foro.elhacker.net/programacion_visual_basic/src_cfrogcontestcls_by_mr_frog_copy-t318871.0.html

DoEvents! :P
« Última modificación: 13 Febrero 2011, 21:14 pm por Mr. Frog © » En línea

seba123neo
Moderador
***
Desconectado Desconectado

Mensajes: 3.621


"No quiero creer, quiero saber" - Carl Sagan


Ver Perfil WWW
Re: [RETO] Obtener nombre de archivo
« Respuesta #9 en: 13 Febrero 2011, 21:16 pm »

con la clase CTiming, la podes bajar de aca:

CTiming

aca va el codigo, con las funciones posteadas hasta ahora. pongan un boton en el form y este codigo.

Código
  1. Option Explicit
  2.  
  3. Private CTiming As CTiming
  4.  
  5. Private Declare Function GetFileTitle Lib "comdlg32.dll" Alias "GetFileTitleA" (ByVal lpszFile As String, ByVal lpszTitle As String, ByVal cbBuf As Integer) As Integer
  6. Private Declare Sub PathStripPath Lib "shlwapi.dll" Alias "PathStripPathA" (ByVal pszPath As String)
  7.  
  8. Const Path As String = "C:\Documents and Settings\Llamazares\Mis documentos\Downloads\SexoDeRanas.avi"
  9.  
  10. Dim i As Long
  11. Dim ValTest As Long
  12. Dim vres As String
  13.  
  14. Private Sub Command1_Click()
  15.    Me.Print "Test de velocidad" & vbCrLf
  16.  
  17.    ValTest = 10000
  18.  
  19.    CTiming.Reset
  20.  
  21.    For i = 0 To ValTest
  22.        vres = StripPath(Path)
  23.    Next
  24.  
  25.    Me.Print "seba123neo api: " & CTiming.sElapsed
  26.  
  27.    CTiming.Reset
  28.  
  29.    For i = 0 To ValTest
  30.        vres = GetFileName(Path)
  31.    Next
  32.  
  33.    Me.Print "ignorantev1.1: " & CTiming.sElapsed
  34.  
  35.    CTiming.Reset
  36.  
  37.    For i = 0 To ValTest
  38.        vres = getFileName2(Path)
  39.    Next
  40.  
  41.    Me.Print "seba123neo (ignorantev1.1): " & CTiming.sElapsed
  42.  
  43.    CTiming.Reset
  44.  
  45.    For i = 0 To ValTest
  46.        vres = Fn7913(Path)
  47.    Next
  48.  
  49.    Me.Print "79137913: " & CTiming.sElapsed
  50.  
  51.    CTiming.Reset
  52.  
  53.    For i = 0 To ValTest
  54.        vres = nombre_archivo(Path)
  55.    Next
  56.  
  57.    Me.Print "grester43hck: " & CTiming.sElapsed
  58.  
  59.    CTiming.Reset
  60.  
  61.    For i = 0 To ValTest
  62.        vres = GetFileMrFrog(Path)
  63.    Next
  64.  
  65.    Me.Print "Mr. Frog ©: " & CTiming.sElapsed
  66.  
  67.    CTiming.Reset
  68.  
  69.    For i = 0 To ValTest
  70.        vres = GetFileName123(Path)
  71.    Next
  72.  
  73.    Me.Print "seba123neo (segunda): " & CTiming.sElapsed
  74.  
  75.    CTiming.Reset
  76.  
  77.    For i = 0 To ValTest
  78.        vres = SacarFilenameE_C(Path)
  79.    Next
  80.  
  81.    Me.Print "Elemental Code: " & CTiming.sElapsed
  82.  
  83.    CTiming.Reset
  84.  
  85.    For i = 0 To ValTest
  86.        vres = SacarFilenameE_Cv2(Path)
  87.    Next
  88.  
  89.    Me.Print "Elemental Code 2: " & CTiming.sElapsed
  90.  
  91. End Sub
  92.  
  93. Private Sub Form_Load()
  94.    Set CTiming = New CTiming
  95.    Me.AutoRedraw = True
  96. End Sub
  97.  
  98. Private Function StripPath(ByVal sPath As String) As String
  99.   Call PathStripPath(sPath)
  100.   StripPath = sPath
  101. End Function
  102.  
  103. Private Function getFileName2(ByVal Path As String) As String
  104.    getFileName2 = Mid$(Path, InStrRev(Path, "\") + 1)
  105. End Function
  106.  
  107. Private Function GetFileName(ByVal Path As String) As String
  108.    Dim cM As Integer
  109.    cM = InStrRev(Path, "\") + 1
  110.    If cM = 0 Then Exit Function
  111.    GetFileName = Mid(Path, cM)
  112. End Function
  113.  
  114. Private Function Fn7913(ByVal sPath As String) As String
  115.    Dim Buffer As String
  116.    Buffer = String(255, 0)
  117.    GetFileTitle sPath, Buffer, Len(Buffer)
  118.    Fn7913 = Left$(Buffer, InStr(1, Buffer, Chr$(0)) - 1)
  119. End Function
  120.  
  121. Private Function nombre_archivo(ByVal Ruta As String) As String
  122.    Dim partes() As String
  123.    partes = Split(Ruta, "\")
  124.    nombre_archivo = partes(UBound(partes))
  125. End Function
  126.  
  127. Public Static Function GetFileMrFrog(ByRef sFile As String) As String
  128.    GetFileMrFrog = RightB$(sFile, LenB(sFile) - InStrB(sFile, "\") - 1)
  129. End Function
  130.  
  131. Public Function GetFileName123(ByRef vPath As String) As String
  132.    GetFileName123 = Right$(vPath, Len(vPath) - InStrRev(vPath, "\"))
  133. End Function
  134.  
  135. Public Function SacarFilenameE_C(ByRef sPath As String) As String
  136.    SacarFilenameE_C = StrReverse(Left(StrReverse(sPath), InStr(1, StrReverse(sPath), "\", vbBinaryCompare) - 1))
  137. End Function
  138.  
  139. Public Function SacarFilenameE_Cv2(ByRef sPath As String) As String
  140.    SacarFilenameE_Cv2 = Right(sPath, Len(sPath) - InStrRev(sPath, "\", Len(sPath), vbBinaryCompare))
  141. End Function
  142.  

PD: no vi que era con la clase modificada de Mr. Frog © , pero me imagino que no hay diferencia no ?

saludos.
« Última modificación: 13 Febrero 2011, 22:12 pm por seba123neo » En línea

La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson
Páginas: [1] 2 3 4 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[Batch] obtener nombre de archivo (solucionado)
Scripting
corax 2 9,207 Último mensaje 23 Junio 2009, 20:29 pm
por corax
Obtener el nombre de PC
Programación C/C++
.:WindHack:. 1 1,511 Último mensaje 16 Mayo 2010, 21:40 pm
por Foxy Rider
Obtener ruta y nombre de archivo por el PID
Programación C/C++
Distorsion 5 4,689 Último mensaje 13 Enero 2011, 15:11 pm
por Distorsion
[Sockets] Obtener Nombre del archivo
.NET (C#, VB.NET, ASP)
kub0x 3 1,889 Último mensaje 14 Abril 2012, 20:06 pm
por kub0x
[RETO] Obtener archivo Web.Config
Programación General
n3oze3kr 1 1,111 Último mensaje 17 Febrero 2015, 22:35 pm
por engel lex
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines