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 - Eleкtro

#5581
bufff... solo he leido la primera frase y he omitido el resto, sinceramente no me apetece leerlo tal y cómo lo escribiste.

1. Bienvenido al foro, pero lee las normas antes de publicar, esto es un foro y hay que respetar unas normas de publicación y comportamiento.

2. Formula las dudas relacionadas con C# en el subforo dedicado a C#/Vb.Net y te ayudaré(mos) a resolver el problema que tengas.

3. Si formulas una duda de programación, CÓMO MINIMO especifica el lenguaje del que se trata, ten un poco de consideración pro los que se molesten en leer tu tema.

4. Utiliza las etiquetas Geshi para publicar bloques de codigo, lo repito, esto es un foro, no el Skype.

5. No es necesario que por cada linea escribas 5 o 20 lineas vacias más, formatea el texto para que sea legible, por dios, ¿pero esto que es?.

Saludos
#5582
Scripting / Re: duda con FOR
1 Marzo 2015, 19:57 PM
Cita de: crisoof en 24 Febrero 2015, 16:45 PMde todas maneras me puedes responder lo que esta en Rojo en el punto 4, para saber para una, siguiente vez

Tanto al declararla:
Set "Var=C:\ruta con espacios"

Cómo al usarla:
Echo "%Var%"

Las comillas dobles en la declaración son para evitar errores de sintaxis, no para añadirle comillas dobles al string, ej:

Bien:
Set "Var=C:\ruta con espacios" & Echo ready

Mal:
Set Var=C:\ruta con espacios & Echo ready

Saludos
#5583
1. Utiliza las etiquetas GeShi para insertar código, esto es un foro y hay que respetar unas normas de publicación.




Puedes utilizar el comando FindStr para filtrar el archivo descartando lineas que empeicen por "X":

(Type "Archivo.txt" | FindStr /I /V "^N0 ^N1 ^N2 ^N3")> "Nuevo Archivo.txt

Lee sobre el uso de rexpresiones regulares (RegEx).

Saludos
#5584
uf, estás utilizando malas prácticas de programación en todos los rincones del código xD.

Prueba así (no lo he testeado, ni tampoco se si he entendido correctamente las condiciones que dices que se deben dar al recibir los datos, pero desde luego puedes simplificar ese IF anidado de tú código en un Switch/Select Case):
Código (vbnet) [Seleccionar]
#Region " Imports "

Imports System.IO.Ports

#End Region

Public NotInheritable Class Form1 : Inherits Form

#Region " Objects / Constants-ReadOnly / Properties "

   ' Estos objetos los inicializo en el constructor del Form solo para poder compilar este ejemplo.
   Private WithEvents sp As SerialPort
   Private ReadOnly ss As StatusStrip
   Private ReadOnly tb As TextBox
   ' ***********************************************

   Private WithEvents tmr As New Timer

   Private ReadOnly charStx As Char = Convert.ToChar(&H1)
   Private ReadOnly charEtx As Char = Convert.ToChar(&H3)
   Private ReadOnly charEot As Char = Convert.ToChar(&H4)
   Private ReadOnly charEnq As Char = Convert.ToChar(&H5)
   Private ReadOnly charAck As Char = Convert.ToChar(&H6)

   ''' <summary>
   ''' Gets the next character from the device's input buffer.
   ''' </summary>
   ''' <value>The next character from the device's input buffer.</value>
   Private ReadOnly Property NextChar As Char
       Get
           Return Convert.ToChar(Me.sp.ReadChar)
       End Get
   End Property

#End Region

#Region " Constructors "

   Public Sub New(ByVal sp As SerialPort, ByVal ss As StatusStrip, ByVal tb As TextBox)

       MyClass.InitializeComponent()

       Me.sp = sp
       Me.ss = ss
       Me.tb = tb

   End Sub

   Public Sub New()
       MyClass.InitializeComponent()
   End Sub

#End Region

#Region " Event-Handlers "

   Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) _
   Handles Me.Load

       Me.OpenPort(Me.sp)

   End Sub

   Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As FormClosingEventArgs) _
   Handles Me.FormClosing

       Me.ClosePort(Me.sp)

   End Sub

   Private Sub Serialport1_DataReceived(ByVal sender As Object, ByVal e As SerialDataReceivedEventArgs) _
   Handles sp.DataReceived

       Me.ProcessChar(Me.NextChar)

   End Sub

   Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As EventArgs) _
   Handles tmr.Tick

       ss.Items(0).Text = DateTime.Now.ToLongTimeString

   End Sub

#End Region

#Region " Private Methods "

   Private Sub OpenPort(ByVal sp As SerialPort)

       If Not sp.IsOpen Then

           Try
               sp.Open()

           Catch ex As Exception
               MessageBox.Show(ex.ToString &
                               Environment.NewLine &
                               ex.StackTrace, "error", MessageBoxButtons.OK, MessageBoxIcon.Error)

           End Try

       End If

   End Sub

   Private Sub ClosePort(ByVal sp As SerialPort)

       If sp.IsOpen Then

           Try
               sp.Close()

           Catch ex As Exception
               MessageBox.Show(ex.ToString &
                               Environment.NewLine &
                               ex.StackTrace, "error", MessageBoxButtons.OK, MessageBoxIcon.Error)

           Finally
               If sp IsNot Nothing Then
                   sp.Dispose()
               End If

           End Try

       End If

   End Sub

   Private Sub ProcessChar(ByVal chr As Char)

       Select Case chr

           Case Me.charStx, Me.charEnq, Me.charEtx
               sp.Write(Me.charAck)

           Case Me.charAck
               ' Do Nothing?.

           Case Me.charEot
               Me.ThreadSafeAppendText(Me.tb, chr & ControlChars.Lf)

           Case Else
               Me.ThreadSafeAppendText(Me.tb, chr)

       End Select

   End Sub

   Private Sub ThreadSafeAppendText(ByVal tb As TextBox, ByVal str As String)

       SyncLock tb

           If tb.InvokeRequired Then
               tb.Invoke(Sub() tb.AppendText(str))

           Else
               tb.AppendText(str)

           End If

       End SyncLock

   End Sub

#End Region

End Class


Nota:
En mi modificación no modifico la codificación de entrada del dispositivo, ya que puedes hacerlo de la siguiente manera, al declarar e inicializar el puerto de serie:
Código (vbnet) [Seleccionar]
Dim sp As New SerialPort With
   {
     .Encoding = Encoding.Default
   }


Saludos
#5585
Cita de: 79137913 en 27 Febrero 2015, 18:15 PMConfirmo que tu codigo funciona correctamente.

Me alegra saberlo, realmente lo hice todo "a ciegas" y tenia esa duda de que al final no sirviera de mucho xD.


Cita de: 79137913 en 27 Febrero 2015, 18:15 PMEste post me alienta a revivir una vieja app, que si no te importa, me gustaria que luego revisaras a ver que te parece, estoy empezando a programarla recien si queres mas info contactame por priv.

jajaja, no hace falta ni que menciones de que app se trata, te estoy leyendo la mente, y creo que a todos los usuarios de elhacker.net nos gustará poder ver esa gran herramienta actualizada, de hecho hace tiempo pensé en hacer una versión .Net de tu programa, pero me desmotivé bastante porque... bueno, porque la app ya existe y es funcional en VB6 así que me pareció un poco tontería el tratar de reinventarla en .Net xD, y tampoco quería que pareciese que intentaba arrebatarte ningún mérito, así que lo mejor es que lo hagas tú, y yo te ayudo si quieres y si lo necesitases, por supuesto.

Un saludo!
#5586
Cita de: Guille270 en  1 Marzo 2015, 15:27 PM

Coger un archivo "hola.txt" de la carpeta Prueba y copiarlo a la carpeta Prueba.Hasta aqui bien, pero me lo deniega xq tienen el mismo nombre.

Te invito a que leas la ayuda del comando 'Copy', escribe en consola:

Copy /?

Leelo y averiguarás en seguida que modificador debes usar para reemplazar un archivo existente.

Saludos
#5587
Almacenar configuraciones de usuario en un archivo de texto plus utilizar los métodos de lectura para parsear dicho archivo, es una técnica muy primitiva.

Lo que deberías hacer es SERIALIZAR un objeto (varios objetos que contengan los distintos datos del usuario) a un archivo binario, y cada vez que quieras cargar los datos de un user, deserializas los objetos y seleccionas el objeto que contiene los datos del usuario en cuestión.

Lo más parecido que he encontrado para serializar en python es usando el módulo pickle, que al parecer no es psoible codificar los datos para una serialización binaria, al menos a mi me genera un archivo de texto plano, pero sigue siendo una idea más elaborada.

Ejemplo:
Código (python) [Seleccionar]
import pickle, time

# Defino la Class 'UserData', que almacena la config del usuario.
class UserData:

   def __init__(self, name, mail, birthday):
       self.__name = name
       self.__mail = mail
       self.__birthday = birthday

   def Name(self):
       return self.__name

   def Mail(self):
       return self.__mail

   def Birthday(self):
       return time.strptime(self.__birthday, '%d %B %Y')

# Instancio la class 'UserData' para 3 usuarios distintos.
user1 = UserData('Elektro', 'ElektroStudios@ElHacker.Net', '8 September 1986')
user2 = UserData('pedrito', None, None)
user3 = UserData('jaimito', None, None)

# Instancio una lista de 'UserData' con los 3 usuarios.
users = [user1, user2, user3]

# Serializo la lista a un archivo.
with open('config.bin', 'wb') as f:
    pickle.dump(users, f)

# Deserializo la lista desde el archivo.
with open('config.bin', 'rb') as f:
    loadedUsers = pickle.load(f)

# Instancio una lista de 'UserData' cargando los usuarios que tengan 'X' nombre.
userMatches = [user for user in loadedUsers if user.Name() == 'Elektro']

# Muestro la informacion del primer usuario cargado.
print userMatches[0].Name()
print userMatches[0].Mail()
print userMatches[0].Birthday().tm_year


Output:
Elektro
ElektroStudios@ElHacker.Net
1986

#5588
Cita de: Guille270 en  1 Marzo 2015, 10:58 AMEn ese caso si esta bien, pero me piden que sea en bucle, osea copiar 3 archivos x ejemplo

¿Cómo?, ¿algo así?:

Código (dos) [Seleccionar]
@Echo OFF

For /L %%# In (1, 1, 3) Do (
Copy /Y "%~f0" "%~n0%%#%~x0"
)

Pause&Exit /B 0


Saludos
#5590
El foro de programación no está para pedir tareas, por ende voy a considerar el post cómo una petición de software (y lo muevo al foro correspondiente).

PD: Siempre puedes intentar desarrollar el código tú, formulando las preguntas especificas en el foro de programación para que te ayudemos a avanzar o a orientarte. Hacer web-scrapping no es muy dificil.

Saludos!