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

 

 


Tema destacado: (TUTORIAL) Aprende a emular Sentinel Dongle By Yapis


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  Ayuda para una funcion de busqueda
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda para una funcion de busqueda  (Leído 2,105 veces)
Dj Quake

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Ayuda para una funcion de busqueda
« en: 7 Agosto 2008, 14:37 pm »

Buenas Buenas,

Pues saludos primero que nada, voy al punto directamente:

Estoy desarrollando una aplicacion que compara dos archivos '.csv' el problema es que no tengo demasiados conocimientos en Vb, y necesito una mano que de verdad me ayude  :-\ ... Por el momento (lo que se me ha ocurrido) es que el programa abra los dos .csv en dos Richtextbox por separado para luego compararlos y sacar al final lo que se va a eliminar, modificar o añadir (Eliminar una referencia de un producto que ya no existe, o añadir uno nuevo, o sea, modificar el precio de este porque asi se debe pues). La cuestion es que para eso tengo los archivos base1.csv (que seria mi base) y base2.csv ( la base de actualizacion) de ahi crearia tres archivos mas -> a Suprimir.csv , a Añadir.csv y a Modificar.csv (esto ultimo sé como hacerlo) y para eso necesito que el programa busque esas referencias inexistentes, precios diferentes o nuevo producto de la base 2 que aun estan/no estan/o hay que modificar en la 1 y ponerlo en tres RichTextBox diferentes para sacarlo en esos tres archivos... A mi se me hace que es bastante simple, y por lo tanto hace ya unos 4 dias que busco eh! En Francés (porque vivo en Francia y bueno hablo francés), En Español (porque no soy un Francés sino un Venezolano jajaja) y en Inglés (porque lo entiendo bien)... Bueno en fin, solo pido ayuda por favor , si alguien sabe resolver esto se lo agradezco por adelantado!
!
PD: Se me ocurrio usar vbtextcompare pero no sé como utilizarlo muy bien  :( :huh: :huh:


En línea

thejuanker

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: Ayuda para una funcion de busqueda
« Respuesta #1 en: 9 Agosto 2008, 21:43 pm »

¿ Y  la estructura de los datos ? asi dificil


En línea

BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: Ayuda para una funcion de busqueda
« Respuesta #2 en: 10 Agosto 2008, 00:10 am »

Buscar en una Carpeta pero no en subacaretas:

Código
  1. Tambien con Like mas la funcion Dir() puedes buscar no recuerdo bien je.
  2.  

Buscar en un director X y tambien en subcarpetas
Código
  1. '   Variable que utilizare para cancelar la busqueda de los archivos
  2. Public Cancelar As Boolean
  3.  
  4. '   Para las busquedas de todos los archivos
  5. Dim Spli, Count, Total  '   Lo que se Busca, Cuantos, Total de los archivos encontrados
  6. Dim Cant()              '   Cantidad de cada archivo encontrado (en ste caso lo que sea parcial o extensiones)
  7.  
  8. Public Sub Buscar1(Formulario As Object, Directorio As String, A_buscar As String, Optional No_Directorios As String)
  9.    Dim i, ass
  10.    i = 0
  11.    Spli = Split(A_buscar, ",")
  12.    On Error GoTo Ok:
  13.    For i = 0 To 101
  14.        ass = Spli(i)
  15.        Count = i
  16.    Next i
  17. Ok:
  18.    ReDim Cant(0 To Count)
  19.    Formulario.Label1(1).Caption = ""
  20.    Total = 0
  21.    For i = 0 To Count
  22.        'Cant(i) = Spli(i)
  23.        Cant(i) = 0
  24.        Formulario.Label1(1).Caption = frm_main.Label1(1).Caption & Spli(i) & ": " & Cant(i) & " "
  25.        Total = Total + Cant(i)
  26.    Next
  27.    frm_main.Label1(1).Caption = frm_main.Label1(1).Caption & " |" & Total & " Encontrados"
  28.    Archivos (Directorio)
  29. End Sub
  30. Public Sub Archivos(Directorio As String)
  31.    Dim FSO, F, sf, F1
  32.    Set FSO = CreateObject("Scripting.FileSystemObject")    '   Creo el objeto
  33.    Set F = FSO.getfolder(Directorio)                       '   Obtenemos el directorio plano
  34.    Set sf = F.SubFolders                                   '   Obtenemos los subfolders del directorio plano actual
  35.    'SubDirectorios (Directorio)                            '   obtenemos los archivos del directorio a scanear
  36.  
  37.    '   Apartir de aqui se empiesan a explorar todos los SubDirectorios (SubCarpetas)
  38.    On Error Resume Next
  39.    For Each F1 In sf
  40.        DoEvents
  41.        frm_dat.lbl_ruta(0).Caption = F1.Path
  42. If Cancelar = True Then Exit Sub                            '   Codigo para cancelar la busqueda de archivos y todo en general
  43.        SubDirectorios (F1.Path)                            '   Obtengo el SubDirectorio y lo cambio
  44. If Cancelar = True Then Exit Sub                            '   Codigo para cancelar la busqueda de archivos y todo en general
  45.        Archivos (F1.Path)                                  '   Obtengo los archivos del subDirectorio actual
  46. If Cancelar = True Then Exit Sub                            '   Codigo para cancelar la busqueda de archivos y todo en general
  47.    Next
  48.    '   Fin
  49. End Sub
  50. Public Sub SubDirectorios(Directorio As String)
  51.    Dim FSO, F, sf, F1, ext, i, a
  52.    i = 0
  53.    Set FSO = CreateObject("Scripting.FileSystemObject")    '   Creo el objeto
  54.    Set F = FSO.getfolder(Directorio)                       '   Obtengo el directorio Plano
  55.    Set sf = F.Files                                        '   Obtengo TODOS los archivos del directorio plano sin ecepción
  56.    '   Apartir de aquí obtengo Todos los archivos sin ecepción
  57.    On Error Resume Next
  58.    For Each F1 In sf
  59.        ext = FSO.GetExtensionName(F1.Path)
  60. If Cancelar = True Then Exit Sub                            '   Codigo para cancelar la busqueda de archivos y todo en general
  61.        For i = 0 To Count
  62.            If Spli(i) = ext Then
  63.                Total = Total + 1
  64.                Set NodX = frm_main.List.ListItems.Add(, , F1.Name) '   Visualiso los archivos en el formulario
  65.                NodX.Tag = F1.Path                                  '   Visualiso los archivos en el formulario
  66.                Cant(i) = Cant(i) + 1
  67.                frm_main.Label1(1).Caption = ""
  68.                For a = 0 To Count
  69.                    frm_main.Label1(1).Caption = frm_main.Label1(1).Caption & Spli(a) & ": " & Cant(a) & " "
  70.                Next a
  71.                frm_main.Label1(1).Caption = frm_main.Label1(1).Caption & " |" & Total & " Encontrados"
  72.            End If
  73.        Next i
  74.    Next
  75.    'fin
  76. End Sub
  77.  

Si no te satisfacen estos ejemplos con objectos aca uno por via Api sacado de la WinApi

Código
  1. 'Create a form with a command button (command1), a list box (list1)
  2. 'and four text boxes (text1, text2, text3 and text4).
  3. 'Type in the first textbox a startingpath like c:\
  4. 'and in the second textbox you put a pattern like *.* or *.txt
  5.  
  6. Private Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" (ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Long
  7. Private Declare Function FindNextFile Lib "kernel32" Alias "FindNextFileA" (ByVal hFindFile As Long, lpFindFileData As WIN32_FIND_DATA) As Long
  8. Private Declare Function GetFileAttributes Lib "kernel32" Alias "GetFileAttributesA" (ByVal lpFileName As String) As Long
  9. Private Declare Function FindClose Lib "kernel32" (ByVal hFindFile As Long) As Long
  10.  
  11. Const MAX_PATH = 260
  12. Const MAXDWORD = &HFFFF
  13. Const INVALID_HANDLE_VALUE = -1
  14. Const FILE_ATTRIBUTE_ARCHIVE = &H20
  15. Const FILE_ATTRIBUTE_DIRECTORY = &H10
  16. Const FILE_ATTRIBUTE_HIDDEN = &H2
  17. Const FILE_ATTRIBUTE_NORMAL = &H80
  18. Const FILE_ATTRIBUTE_READONLY = &H1
  19. Const FILE_ATTRIBUTE_SYSTEM = &H4
  20. Const FILE_ATTRIBUTE_TEMPORARY = &H100
  21.  
  22. Private Type FILETIME
  23.    dwLowDateTime As Long
  24.    dwHighDateTime As Long
  25. End Type
  26.  
  27. Private Type WIN32_FIND_DATA
  28.    dwFileAttributes As Long
  29.    ftCreationTime As FILETIME
  30.    ftLastAccessTime As FILETIME
  31.    ftLastWriteTime As FILETIME
  32.    nFileSizeHigh As Long
  33.    nFileSizeLow As Long
  34.    dwReserved0 As Long
  35.    dwReserved1 As Long
  36.    cFileName As String * MAX_PATH
  37.    cAlternate As String * 14
  38. End Type
  39. Function StripNulls(OriginalStr As String) As String
  40.    If (InStr(OriginalStr, Chr(0)) > 0) Then
  41.        OriginalStr = Left(OriginalStr, InStr(OriginalStr, Chr(0)) - 1)
  42.    End If
  43.    StripNulls = OriginalStr
  44. End Function
  45.  
  46. Function FindFilesAPI(path As String, SearchStr As String, FileCount As Integer, DirCount As Integer)
  47.    'KPD-Team 1999
  48.    'E-Mail: KPDTeam@Allapi.net
  49.    'URL: http://www.allapi.net/
  50.  
  51.    Dim FileName As String ' Walking filename variable...
  52.    Dim DirName As String ' SubDirectory Name
  53.    Dim dirNames() As String ' Buffer for directory name entries
  54.    Dim nDir As Integer ' Number of directories in this path
  55.    Dim i As Integer ' For-loop counter...
  56.    Dim hSearch As Long ' Search Handle
  57.    Dim WFD As WIN32_FIND_DATA
  58.    Dim Cont As Integer
  59.    If Right(path, 1) <> "\" Then path = path & "\"
  60.    ' Search for subdirectories.
  61.    nDir = 0
  62.    ReDim dirNames(nDir)
  63.    Cont = True
  64.    hSearch = FindFirstFile(path & "*", WFD) '<------ el * es un comodin y buscara TODO igual busca archivos Zip sustituyendo el * por *.zip y de igual forma lo que sea tu desides ok espefimenta ja
  65.    If hSearch <> INVALID_HANDLE_VALUE Then
  66.        Do While Cont
  67.        DirName = StripNulls(WFD.cFileName)
  68.        ' Ignore the current and encompassing directories.
  69.        If (DirName <> ".") And (DirName <> "..") Then
  70.            ' Check for directory with bitwise comparison.
  71.            If GetFileAttributes(path & DirName) And FILE_ATTRIBUTE_DIRECTORY Then
  72.                dirNames(nDir) = DirName
  73.                DirCount = DirCount + 1
  74.                nDir = nDir + 1
  75.                ReDim Preserve dirNames(nDir)
  76.            End If
  77.        End If
  78.        Cont = FindNextFile(hSearch, WFD) 'Get next subdirectory.
  79.        Loop
  80.        Cont = FindClose(hSearch)
  81.    End If
  82.    ' Walk through this directory and sum file sizes.
  83.    hSearch = FindFirstFile(path & SearchStr, WFD)
  84.    Cont = True
  85.    If hSearch <> INVALID_HANDLE_VALUE Then
  86.        While Cont
  87.            FileName = StripNulls(WFD.cFileName)
  88.            If (FileName <> ".") And (FileName <> "..") Then
  89.                FindFilesAPI = FindFilesAPI + (WFD.nFileSizeHigh * MAXDWORD) + WFD.nFileSizeLow
  90.                FileCount = FileCount + 1
  91.                List1.AddItem path & FileName
  92.            End If
  93.            Cont = FindNextFile(hSearch, WFD) ' Get next file
  94.        Wend
  95.        Cont = FindClose(hSearch)
  96.    End If
  97.    ' If there are sub-directories...
  98.    If nDir > 0 Then
  99.        ' Recursively walk into them...
  100.        For i = 0 To nDir - 1
  101.            FindFilesAPI = FindFilesAPI + FindFilesAPI(path & dirNames(i) & "\", SearchStr, FileCount, DirCount)
  102.        Next i
  103.    End If
  104. End Function
  105. Sub Command1_Click()
  106.    Dim SearchPath As String, FindStr As String
  107.    Dim FileSize As Long
  108.    Dim NumFiles As Integer, NumDirs As Integer
  109.    Screen.MousePointer = vbHourglass
  110.    List1.Clear
  111.    SearchPath = Text1.Text
  112.    FindStr = Text2.Text
  113.    FileSize = FindFilesAPI(SearchPath, FindStr, NumFiles, NumDirs)
  114.    Text3.Text = NumFiles & " Files found in " & NumDirs + 1 & " Directories"
  115.    Text4.Text = "Size of files found under " & SearchPath & " = " & Format(FileSize, "#,###,###,##0") & " Bytes"
  116.    Screen.MousePointer = vbDefault
  117. End Sub
  118.  
« Última modificación: 10 Agosto 2008, 00:22 am por ░▒▓BlackZeroҖ▓▒░ » En línea

The Dark Shadow is my passion.
Dj Quake

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Re: Ayuda para una funcion de busqueda
« Respuesta #3 en: 6 Septiembre 2008, 22:02 pm »

¿ Y  la estructura de los datos ? asi dificil


Sorry por durar tanto tiempo sin escribir, para la estructura de datos...

Hay:        Productos internos              y  Productos Externos
Entonces:
1.Si un P.i(referencia) no esta en P.e(referencia) entonces hay que eliminarlo
2. Si viceversa entonces producto nuevo, hay que añadirlo
3. Si en PI no es el mismo precio que PE entonces cambiar precio (PE)

todo esto sale en 3 archivos diferentes (por supuesto .csv)

Entonces la estructura es algo como esto:

Referencia - Producto - Precio

;).. Ya ha pasado un mes y ya resolvi eproblema aunque tomé en cuenta la respuesta de BlackZero que por cierto si me ayudó.
En línea

Dj Quake

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Re: Ayuda para una funcion de busqueda
« Respuesta #4 en: 6 Septiembre 2008, 22:18 pm »

Buscar en una Carpeta pero no en subacaretas:

Código
  1. Tambien con Like mas la funcion Dir() puedes buscar no recuerdo bien je.
  2.  

Buscar en un director X y tambien en subcarpetas
Código
  1.  
  2.  

Muchas gracias por tu respuesta aun si no era de busquedas de archivo ;), el trabajo esta resuelto y hé aqui la soluciôn para que todos sepan como quedo el proyecto..

Código
  1. Private Sub CompareLists()
  2.  
  3.        ModifiedList.Clear() 'Esto es en memoria (Arraylist)
  4.        DeleteList.Clear() 'lo mismo
  5.        AddList.Clear() 'lo mismo
  6.  
  7.        Dim found As Boolean
  8.  
  9.        'Celà pour Modifier ou Ajouter des items sur les listes correspondants (para modificar o añadir nuevos precios o productos)
  10.  
  11.        For i As Integer = 0 To ExternalProducts.Count - 1
  12.            found = False
  13.  
  14.            For j As Integer = 0 To InternalProducts.Count - 1
  15.                If (InternalProducts(j).Reference) = (ExternalProducts(i).Reference) And (InternalProducts(j).Price <> ExternalProducts(i).Price) Then
  16.                    found = True
  17.                    ModifiedList.Add(ExternalProducts(i))
  18.                    Exit For
  19.                Else
  20.                    If InternalProducts(j).Reference = ExternalProducts(i).Reference Then
  21.                        found = True
  22.                        Exit For
  23.                    End If
  24.                End If
  25.            Next j
  26.  
  27.            If found = False Then
  28.                AddList.Add(ExternalProducts(i))
  29.            End If
  30.        Next i
  31.  
  32.        For i As Integer = 0 To InternalProducts.Count - 1
  33.            found = False
  34.  
  35.            'La liste de Suppression (lista de los que hay que eliminar)
  36.  
  37.            For j As Integer = 0 To ExternalProducts.Count - 1
  38.                If ExternalProducts(j).Reference = InternalProducts(i).Reference Then
  39.                    found = True
  40.                    Exit For
  41.                End If
  42.            Next j
  43.  
  44.            If found = False Then
  45.                DeleteList.Add(InternalProducts(i))
  46.            End If
  47.        Next i
  48.  
  49.        Sauve_Fichier() ' la funcion que salva el archivo que quedo hecha con Flujos (Streams)
  50. End sub
  51.  
Código
  1. Public Class Elform1
  2.    Private InternalProducts As ArrayList = New ArrayList
  3.    Private ExternalProducts As ArrayList = New ArrayList
  4.  
  5.    Private ModifiedList As ArrayList = New ArrayList
  6.    Private DeleteList As ArrayList = New ArrayList
  7.    Private AddList As ArrayList = New ArrayList
  8.  
  9.  
'sorry esto iba al principio  :xD

 Y claro todo en VB. Net  ;)...
Saludos!
A +
« Última modificación: 6 Septiembre 2008, 22:24 pm por Dj Quake » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
formulación de [dork's] de búsqueda para [web's bug]
Bugs y Exploits
netco0m 3 4,765 Último mensaje 28 Agosto 2012, 03:57 am
por afdlkglfgfdgfhgf
Ayuda para busqueda en archivos en c++
Programación C/C++
veronicaTeran 3 2,707 Último mensaje 13 Diciembre 2012, 17:39 pm
por veronicaTeran
Función generalizada para busqueda en una base de datos
Programación Visual Basic
nbent 0 1,368 Último mensaje 13 Septiembre 2015, 20:18 pm
por nbent
Ayuda con Busqueda dicotomica
Java
maestro kirer 3 4,053 Último mensaje 10 Diciembre 2017, 15:37 pm
por Serapis
Ayuda con nomenclatura para función geométrica
Programación General
Eleкtro 6 2,490 Último mensaje 7 Diciembre 2018, 21:55 pm
por Serapis
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines