|
271
|
Programación / .NET (C#, VB.NET, ASP) / Re: Recortar caracteres
|
en: 23 Octubre 2015, 01:20 am
|
Hola Elektro con todos los respetos SI que hay verios formatos para CSV. Tu mismo lo has dicho un 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
|
Programación / .NET (C#, VB.NET, ASP) / Re: Recortar caracteres
|
en: 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 ExcelYa no lo doy más vueltas
|
|
|
274
|
Programación / .NET (C#, VB.NET, ASP) / Re: Recortar caracteres
|
en: 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
|
Programación / .NET (C#, VB.NET, ASP) / Re: Recortar caracteres
|
en: 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: 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 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: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: Dim Texto as Sring Texto = "¡Hola que tal!" Call GuardarArchivoTexto(Texto , "C:\Prueba.txt")
y si va a ser CSVDim Texto as Sring Texto = "¡Hola que tal!" Call GuardarArchivoTexto(Texto , "C:\Prueba.csv")
Espero que te sirva
|
|
|
276
|
Programación / .NET (C#, VB.NET, ASP) / Re: Cerrar aplicación mientras ser reproduce un bucle Do/Loop
|
en: 19 Octubre 2015, 23:41 pm
|
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. 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. 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: Label1.Invoke(DirectCast(Sub() Label1.Text = Datos, MethodInvoker))
También: 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
|
Programación / .NET (C#, VB.NET, ASP) / Cerrar aplicación mientras ser reproduce un bucle Do/Loop
|
en: 19 Octubre 2015, 01:13 am
|
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 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 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
|
|
|
280
|
Programación / .NET (C#, VB.NET, ASP) / Re: Personalizar colores entorno de desarrollo de VB.NET 2010
|
en: 13 Octubre 2015, 14:27 pm
|
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? 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
|
|
|
|
|
|
|