Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Lekim

#271
.NET (C#, VB.NET, ASP) / Re: Recortar caracteres
23 Octubre 2015, 01:20 AM
Hola Elektro

con todos los respetos SI que hay verios formatos para CSV. Tu mismo lo has dichoun CSV es un archivo de TEXTO PLANO (archivo.txt) con la extensión modificada (archivo.csv) cuyo contenido está delimitado por comas u otro caracter que queda a elección de quien construye la tabla.

Partiendo de esa base es el formato (de guardado o lectura) que tu le quieras dar y no me refiero a la forma de compresión o codificación máquina del archivo (quizás debí especificar más).

Por lo que se ha visto puede ser el de punto y coma que usa Excel ';', o simplemente separación por comas o las comillas y cada grupo de datos de forma lineal. Y el sistema es crear separaciones de datos por estos signos sean ;, , o  "","", como delimitadores entre un dato y otro. Cuando digo formato me refiero a diferentes formas de crear o interpretar la información del archivo. No se me ocurre otra palabra.  


En cuanto el equivalente a Input en .Net que expones tengo algunas ideas y me va a ser muy útil, gracias. Creo que eso justo es lo que necesita la persona que inició este tema.

#272
.NET (C#, VB.NET, ASP) / Re: Recortar caracteres
21 Octubre 2015, 10:20 AM
En cualquier caso el método par leerlo debe ser un equivalente al Input (debería haberlo), en VB6 pero desde VB.NET.

Si te fijas:
Element Name,Windows NT,Windows,Windows CE,Win32s,Component,Component Version,Header File,Import Library,Unicode,Element Type
ADsBuildEnumerator,4.0 or later,,,,ADSI,,adshlp.h,,,function


Aunque se vea desordenado sigue una lógica:
Dato1,Dato2,Dato3,Dato4,Dato5,...,Dato11

Donde ,,  es un espacio nulo es decir DatoX= ""

Y si su archivo lo muestra así:
"Dato1","Dato2","Dato3","Dato4","Dato5",...,"Dato11"

Viene a ser lo mismo.

Luego el sistema para leerlo debe ser similar al Input en VB.

Los archivos CSV que tengo yo, no son como los que pones de ejemplo. De hecho al abrirlo con el Excel se muestra todo en la misma columna tal cual como está en el archivo con comas y todo.

Por eso digo que debe haber varios formatos con misma extensión. Tengo clarísimo que los ejemplos que he puesto yo se han creado y se leen siguiendo un sistema similar al Input en VB6. Y por el ejemplo que ha puesto ella también deben ir por ahí los tiros.

Saludos



Utilizando el excel me he creado mi propio archivo
y se ha creado de la siguiente manera

1;124;9789
2;145;788
3;7878;65
4;9789;78
5;99;87
6;;88
7;788;7888
8;787;7
10;8;8


En el Excel son 9 filas y 3 columnas.
Luego está claro que, todo depende del sistema para crear este tipo de archivo. como dices
un archivo CSV o Comma-separated values, es un archivo de texto plano el cual, como su propia definición indica, está delimitado por comas (u otro caracter)

Yo creo que el de ella sigue un patrón IDÉNTICO al del Input en VB6 y no el Excel

Ya no lo doy más vueltas  :xD


#273
Ok Elektro  :)

Encontré lo que comentas aquí. Lo probaré cuando pueda.

CANCELACIÓN DE SUBPROCESOS ADMINISTRADOS

Saludos
#274
.NET (C#, VB.NET, ASP) / Re: Recortar caracteres
21 Octubre 2015, 09:21 AM
A partir de ahora en VB voy a preguntar si es para VB6 o para VB.NET  :-\

Siempre pasa igual :(

Los primero y antes de nada pon código, así sabremos que lenguaje usas o bien especifique que es para VB.NET.


Pero mantengo lo que dije pues he buscado ese tipo de archivos CSV, y hasta se pueden abrir con el notepad y son perfectamente legibles y sin comillas. No se quizás hay varios formatos.

Y también estoy de acuerdo con electro en que habría que ver como está escrito el texto, donde están las comas. Si no me equivoco debería ser algo similar a esto:

Element Name,Windows NT,Windows,Windows CE,Win32s,Component,Component Version,Header File,Import Library,Unicode,Element Type
ADsBuildEnumerator,4.0 or later,,,,ADSI,,adshlp.h,,,function
ADsBuildVarArrayInt,4.0 or later,,,,ADSI,,adshlp.h,,,function
ADsBuildVarArrayStr,4.0 or later,,,,ADSI,,adshlp.h,,,function


Job #, goURL, Reason, Destination
10101, learn_ps_processraw_cz, Automation/Batch Processing, http://av.adobe.com/russellbrown/ImageProcessorSM.mov
10101, learn_ps_viewglyphsai_cz, Type, http://av.adobe.com/russellbrown/OpenTypeSM.mov
10101, learn_ps_cs5_gsindex_cz, Getting Started and tutorials link on homepage, http://www.adobe.com
10101, ps_cs5_plugins_mac_cz, Download page for optional plug-ins, http://www.adobe.com
10101, ps_cs5_plugins_win_cz, Download page for optional plug-ins, http://www.adobe.com

#275
.NET (C#, VB.NET, ASP) / Re: Recortar caracteres
20 Octubre 2015, 20:45 PM
Hola Eliza

Estaba intentado resolver tu problema hasta que me he dado cuenta de una cosa, y es que la cadena que muestra no tiene ningún sentido:

"652394532592467968,"","","2015-10-09 08:05:52 +0000","Twitter Web Client","Hay ocasiones en la que mejor prevalecer ‪#‎Sisepuede‬ y seguir adelante."


¿De verdad esto es así? Porque yo he buscado este tipo de archivo que nombras *.csv y no tienen ese formato.

Esto lo he sacado de WIN32API.CSV:
Element Name,Windows NT,Windows,Windows CE,Win32s,Component,Component Version,Header File,Import Library,Unicode,Element Type
ADsBuildEnumerator,4.0 or later,,,,ADSI,,adshlp.h,,,function
ADsBuildVarArrayInt,4.0 or later,,,,ADSI,,adshlp.h,,,function
ADsBuildVarArrayStr,4.0 or later,,,,ADSI,,adshlp.h,,,function
...



Creo que el archivo que intentas abrir se ha creado utilizando Open/For Append y Write. Este método crea los archivos con comillas:


NumFile = FreeFile
Open NombreFichero For Append As NumFile
Write #NumFile , Date$, Time$, Time$, "00:00:00"
Close NumFile


Se obtiene un archivo con el texto:

"10-20-2015","23:30:13","23:30:13","00:00:00"

Ahora al intentar leerlo la cosa se te complica. Para leerlo se hace de la siguiente manera:


NumFile = FreeFile
Open NombreFichero For Input As NumFile
Input #NumFile , Dato1, Dato2, Dato3, Dato4
Close NumFile


Ejemplo:
Código (vb) [Seleccionar]

Option Explicit

Private Sub cmdGuardar_Click()
Dim NombreFichero As String
Dim NumFile As Integer

NombreFichero = App.Path & "\Prueba.txt"
NumFile = FreeFile

Open NombreFichero For Append As NumFile
Write #NumFile , Date$, Time$, Time$, "00:00:00"
Close NumFile

'Se guarda con este formato
'"10-20-2015","23:27:56","23:27:56","00:00:00"
End Sub

Private Sub cmdAbrir_Click()
Dim NombreFichero As String
Dim Dato1 As String, Dato2 As String, Dato3  As String, Dato4 As String
Dim NumFile As Integer

NombreFichero = App.Path & "\Prueba.txt"
NumFile = FreeFile

Open NombreFichero For Input As NumFile
Input #NumFile , Dato1, Dato2, Dato3, Dato4
Close NumFile
Text1.Text = Dato1 & "  " & Dato2 & "  " & Dato3 & "  " & Dato4

'Se Abre con este formato (sin comillas)
'10-20-2015  23:27:56  23:27:56  00:00:00
End Sub



Voy a proponerte otra manera y luego si puedes me comentas si te sirve.

Saludos




Pues lo prometido es deuda.

Este código lee un archivo CSV  (normal, sin comillas) e introduce línea por línea en un ListBox

Código (vb) [Seleccionar]
Option Explicit
Private Sub Command1_Click()
 Dim Texto As String
 Dim DirFile As String

 '//Directorio donde se encuentra el archivo
 DirFile = App.Path & "\goURL_lr_photoshop_cz.csv"

 'Obtiene el texto
 Texto = LeerArchivo(DirFile)

 'Obtiene las líneas y las introduce en un ListBox
  Call CrearListaCompleta(Texto, List1)

End Sub
'//Proceso para obtener las líneas de un texto
Public Sub CrearListaCompleta(ByVal strLista As String, ByVal objList As ListBox)
   Dim Lineas() As String
   Dim i As Integer
   Lineas = Split(strLista, vbNewLine)
   For i = LBound(Lineas) To UBound(Lineas)
       If Lineas(i) <> "" Then objList.AddItem Lineas(i)
   Next
End Sub

Public Function LeerArchivo(ByVal DirFile As String) As String
 Dim FileName As String
 Dim File As Integer
 File = FreeFile
 FileName = DirFile
 Open FileName For Input As File
   LeerArchivo = Input(LOF(File), #File)
 Close File
End Function


Para guardar una archivo de texto (sin que se creen comillas) puedes usar esto:

Código (vb) [Seleccionar]
Public Function GuardarArchivoTexto(ByVal strTexto As String, ByVal FileName As String)
 Dim File As Integer, Cont As Integer, cDato As String
 On Error GoTo EvitarError
     File = FreeFile
 Open FileName For Binary As #File
For Cont = 1 To Len(strTexto)
   Put #File, Cont, strTexto
   Close #File
Next
EvitarError:
Select Case Err.Number
   Case 91
   Resume Next
End Select
End Function


Para llamarlo:
Código (vb) [Seleccionar]

Dim Texto as Sring
Texto = "¡Hola que tal!"
Call GuardarArchivoTexto(Texto , "C:\Prueba.txt")  


y si va a ser CSV

Código (vb) [Seleccionar]

Dim Texto as Sring
Texto = "¡Hola que tal!"
Call GuardarArchivoTexto(Texto , "C:\Prueba.csv")  



Espero que te sirva  ;)
#276
Gracias  los dos ;-)


No estoy seguro que opción es mejor pero creo que por sencillez me decanto por usar la variable boleana.

He aprovechado para realizar un experimento de velocidad de los procesos dentro del bucle, para este ejemplo, que imagino que según el ordenador los resultados será  distinto.

Código (vbnet) [Seleccionar]

Option Explicit On
Option Strict On
Imports System.Text
Public Class Form1
   Dim AplicacionCerrada As Boolean = False
   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
       Dim stopWatch As New Stopwatch() : Dim ts As TimeSpan : Dim elapsedTime As String = Nothing
       Dim Cont As Integer = 0

       stopWatch.Start()
       Do
           Cont += 1
           ts = stopWatch.Elapsed
           String.Format("{00}", ts.Seconds)

           '///Experimeto que mide el número de procesos por segundo
           Dim Datos As New StringBuilder
           With Datos
               .AppendFormat("Procesos: {0}", CInt(Cont))
               .AppendLine()
               .AppendFormat("Segundos: {0}", ts.Seconds)
               .AppendLine()
               .AppendFormat("Velocidad: {0}", (CInt(Cont) / (CInt(ts.Seconds))).ToString("0.000") & " Proc/s")
           End With
           Label1.Text = Datos.ToString
           '/////////////////////////////////////////////////////////////////////////

           If AplicacionCerrada = True Then End
           If ts.Seconds = 10 Then stopWatch.Stop() : Exit Do
           My.Application.DoEvents()
       Loop While Cont < 14000
   End Sub
   Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As FormClosingEventArgs) Handles MyBase.FormClosing
       AplicacionCerrada = True
   End Sub
End Class





Esta sería la otra forma, aunque más compleja y que me ha costado encontrar.

Código (vbnet) [Seleccionar]

Option Explicit On
Option Strict On
Imports System.Threading.Tasks
Imports System.Text

Public Class Form1

   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
       Dim stopWatch As New Stopwatch() : Dim ts As TimeSpan : Dim elapsedTime As String = Nothing
       Dim Cont As Integer = 0

       Task.Factory.StartNew(Sub()

                                 stopWatch.Start()
                                 'Desactivar el chequeo sobre acceso de varios subprocesos
                                 ' CheckForIllegalCrossThreadCalls = False

                                 Do
                                     Cont += 1
                                     ts = stopWatch.Elapsed
                                     String.Format("{00}", ts.Seconds)
                                     '///Experimeto que mide el número de procesos por segundo
                                     Dim Datos As New StringBuilder
                                     With Datos
                                         .AppendFormat("Procesos: {0}", CInt(Cont))
                                         .AppendLine()
                                         .AppendFormat("Segundos: {0}", ts.Seconds)
                                         .AppendLine()
                                         .AppendFormat("Velocidad: {0}", (CInt(Cont) / (CInt(ts.Seconds))).ToString("0.000") & " Proc/s")
                                     End With
                                     Label1.Invoke(CType(Sub() Label1.Text = Datos.ToString, MethodInvoker))
                                     '/////////////////////////////////////////////////////////////////////////
                                     If ts.Seconds = 10 Then stopWatch.Stop() : Exit Do
                                     '  My.Application.DoEvents()
                                 Loop While Cont < 14000

                             End Sub).ContinueWith(Sub()
                                                       Me.Invoke(Sub()
                                                                     Me.Text = "Proceso terminado"
                                                                 End Sub)
                                                   End Sub)
   End Sub
End Class



De esta última forma usando Task e Invoke como habéis dicho el programa se cierra sin problemas.

Me ha costado averiguar también como llamar a un control externo dentro de un subproceso, ya que si llamaba diréctamente obtenía error. La forma era la siguiente:

Código (vbnet) [Seleccionar]
Label1.Invoke(DirectCast(Sub() Label1.Text = Datos, MethodInvoker))

También:
Código (vbnet) [Seleccionar]
Me.Invoke(Sub()
       Me.Text = "Proceso terminado"
       End Sub)



En cuanto a la eficiencia creo que es lo mismo porque me dan resultados idénticos, me refiero al experimento.

Si el ordenador es al menos normalito, debería salir del bucle antes de los 10 segundos.

Saludos
#277
Hola

Hola me gustaría saber como salir de la aplicación cuando todavía no se a salido de DO/LOOP

Mi método clásico siempre ha sido poner END en el evento Unload en VB y también en Dispose en Net. No se si habrá otra manera también sencilla.

Por ejemplo he creado un Bucle Do/Loop en el que creo un reloj en el cual si han pasado 10 segundos se sale de del bucle. La razón es porque quiero que el bucle dure un mínimo de 10 segundos a espera que se cumpla una condición y si pasados los 10 segundos no se cumple sale del bucle.

Aquí va el supercódigo de ejemplo :P
Código (vbnet) [Seleccionar]
Option Strict On
Option Explicit On
Public Class Form1

   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
       Dim SecA As TimeSpan, SecB As TimeSpan
       SecA = TimeSpan.FromTicks(Date.Now.Ticks)
       Do
           SecB = TimeSpan.FromTicks(Date.Now.Ticks).Subtract(SecA)
           Me.Text = CStr(SecB.Seconds)
           If CInt(SecB.Seconds) = 10 Then Exit Do
           My.Application.DoEvents()
       Loop 'While (podría poner condición y si se cumple sale antes de los 10 segundos)
   End Sub

   Private Sub Form1_Disposed(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Disposed
       End
   End Sub
End Class


El problema está en que si quito
Código (vbnet) [Seleccionar]
   Private Sub Form1_Disposed(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Disposed
       End
   End Sub


No se puede cerrar la apliación hasta que no pasen los 10 segundos
#278
Ya está solucionado :laugh:.

Como dije quedaba probar el editor. Ya lo he probado.

Visual Studio Color Theme Editor
https://visualstudiogallery.msdn.microsoft.com/20cd93a2-c435-4d00-a797-499f16402378






Make the Visual Studio 2010 IDE colors look like Visual Studio 2008
http://www.hanselman.com/blog/MakeTheVisualStudio2010IDEColorsLookLikeVisualStudio2008.aspx


Esto si permite cargar archivos *.vstheme
https://raw.githubusercontent.com/peteristhegreat/DarkVS2010Theme/master/Expression.vstheme


#279
Hola

He usado dos componentes que he añadido al cuadro de herramientas con el fin de usar el motor de firefox: WebKitBrowser y GeckoFX

El caso que puedo configurar Firefox para que use el Socks v5 en lugar de Proxy HTTP. Pero no he visto la forma de hacer que estos motores  en Vb.net usen socks.

Se que es un poco complicado el tema. Si lo sabéis bien, si no pues nada que se le va hacer.

MAS INFORMACIÓN:
Con WebKitBrowser he seguido el siguiente tutorial:

http://thebot.net/threads/vb-net-how-to-make-a-firefox-webbrowser.142359/

Componente WebKit
http://webkitdotnet.sourceforge.net/downloads.php
http://sourceforge.net/projects/webkitdotnet/?source=typ_redirect


Con GeckoFX he seguido el siguiente turorial
http://www.scenebeta.com/tutorial/como-usar-el-motor-de-mozilla-firefox-en-vb-net


GeckoFX
http://sourceforge.net/projects/geckofx/

Necesita los archivos  Xulrunner que se añaden a la carpeta  Debug de nuestro proyecto:
https://eclipse.org/atf/old/downloads/base_files/manualXulrunner_section.php

Gracias
#280
Bueno, no soy un experto en Net, apenas acabo de empezar a sacarle jugo y con el 2010 me apaño.

Solo quiero cambiar el color de la maldita selección, nada más, ¿para eso lo tengo que actualizar ¿Ya es hora? ¿Por qué?, ¿estoy obligado?.  

Entiendo que un programador avanzado y que se gana la vida con ello quiere lo último pero yo solo quiero cambiar el color de la selección. Además, VB.NET no es barato como para estar actualizando a nueva versión cada  cinco minutos, ¿Como? ¿ la versión Express? para eso prefiero usar .Net 2010 completo. Supongo que te refieres a que actualice a una versión pirata ¿NO?  :xD

No se, esperaba que alguien supiera algún truquillo, como modificar algún archivo de configuración (setting) o extensión dll, del directorio del programa o algo así.

En cuanto a cargar el archivo *.vstheme, VB2010 no lo permite, tan sólo *.vssettings.

Creo que el editor podría funcionar, en cuanto pueda lo descargo y lo pruebo.

Por cierto,  Entorno de Desarrolo Integrado = Integrated Development Environment . Es una traducción. Vamos, si hablo en castellano, escribo en castellano, para que se me entienda. No confundamos churros con merinas. Ya al poner las siglas IDE lo pones en 'Universal', a eso me refiero con "mmm, no se a que te refieres  :¬¬". He tenido que buscar en Google que era IDE. No todos conocemos el 'lenguaje Universal'. Pero esto es solo un apunte personal, no te lo tomes a mal  ;). Contigo siempre aprendo algo y es de agradecer ¿De acuerdo?

Saludos