matriz mutidimensional--txt

Iniciado por PETTETE, 8 Mayo 2017, 07:26 AM

0 Miembros y 1 Visitante están viendo este tema.

PETTETE

Hola buenas,

tengo un problemilla con un array multidimensional.
La cosa es que tengo un txt, con los datos desordenados y lo quiero ordenar dandole una cierta medida a los datos.

He guardado los datos de ese txt en un array multidimenasional, dandole así una medida a las columnas de ese array.

El problemilla es que no se como pasar los datos del array multidimensional a un txt.

¿podríais ayudarme?

sabeis que os lo agradecería muchiiisiimo.

Un saludo,
PETETE;)
UN SALUDO DE VUESTRO AMIGO Y VECINO,
PETETE;)

Serapis

Cuesta entenderte, de hecho ni siquiera estoy seguro de haberlo logrado...

Veamos, dices tener unos datos en un fichero txt y que estos están desordenados...
Qués es lo que está desordenados, los valores o los datos?.
por ejemplo:
valores desordenados:
144, 211, 083, 015, 202, 099
ordenados:
015, 083, 099, 144, 202, 211
-----------------------------------

datos desordenados:
13, 35, Juan Valdivia, 13856721, Perú, calle Sol;
06834965, 42, Calle de los álamos, Mejico, 156, Diego Centella
ordenados:
Nombre, edad, ciudad, calle, número, identificador;
Juan Valdivia, 35, Perú, Calle Sol, 13, 13856721
Diego Centella, 42, Méjico, Calle de los álamos, 156, 06834965
---------------------------------

Un array multidimensional, en realidad puede considerarse como un array unidimensional... con el añadido de que el acceso está 'cordinado' bajo un diseño específico.
Así un array como Array(0-9, 0-99, 0-1), tiene un tamaño de:
10*100*2=2000 (* número de bytes que ocupe el tipo de datos que almacena, si el tipo es un objeto, lo que se guarda ahí entonces es la dirección al objeto).
...y si imprimes la dirección donde se guardan los datos (basta el primero y  el último), verás que todos ellos están consecutivos en memoria.

Una forma fácil es forzar entonces la escritura a disco partiendo de la dirección del contenido en memoria es muy rápido, pero tiene sus pegas.. no todos los lenguajes habilitan de forma fácil el acceso a la dirección (desafortunadamente las funciones ptr... no son contempladas como pertenecientes a objetos, así pueden encontrarse en  clases de tipo Marshaling) la otra limitación es que si el array contiene objetos, tampoco sería util porque estarías guardando las direcciones de los objetos, no el dato (por ejemplo si son cadenas de texto), en resumen valdría solo para datos numéricos y buleanos.

De todos modos como no queda claro, en qué consiste ese orden que le quieres dar a los datos y el inespecífico "medida de las columnas dle array" (no sé si quieres señalar el tamaño de las dimensiones del array o si te refieres al ancho de las columnas de por ejemplo un control de tipo "Grid"...

Tampoco aclaras de qué lenguaje se trata, así que aventurando digamos de forma genérica que los objetos Streamwriter, StringWriter, StreamBuffer, etc... son adecuados para esos menesteres suelen tener métodos llamados Open para abrir un canal de escritura y Writebytes (con múltiples sobrecargas) para escribir los datos...
Y siempre puedes crear tus propios métodos, según el tipo de datos y hacerlo de forma un poco más manual recorriendo tu mismo el array y así escribiendo lo que te parezca y en el orden que prefieras... Para ello recurre a clases en el espacio IO que tienen métodos Write, para tipos de datos genéricos.

TickTack

Hola PETTETE,

estoy muy contento y muy ansioso de poder darte una respuesta que quiza sea mejor:
Espero que sea lo que buscaste. Estaba todo el dia con esto (porque C# todavia me cuesta muchisimo) y no pude estudiar ni limpiar la casa.
Tu programa esta disenado y muy limpito. ::)

Aqui tienes:

http://www.mediafire.com/file/26onj32b9qx9shi/Programa+para+pasar+de+matriz+a+archivo+.txt.exe

Y aqui tienes el codigo fuente:

http://www.mediafire.com/file/ki0y5g6z6h5xk1n/Matrix.rar

Espero que te sirva. Me gusto dedicarte tiempo hoy.

Si necesitas que le agregue algo o si necesitas saber algo solo dilo. Pero eso estamos nosotros. Sientate comodo en elhacker.net.  ::)

Saludos!

PD.: Pero ahora si me tengo que poner a estudiar y a limpiar la casa hoy porque sino estare en problemas. ::)
Citar
"Ninguna mentira puede inventarse lo suficientemente patán: el pueblo hispanohablante la cree. Por una consigna que se les dio, persiguieron a sus compatriotas con mayor encarnizamiento que a sus verdaderos enemigos."

PETTETE

Buenas,
primero, gracias por contestar.

segundo, intentaré explicarme algo mejor.

tengo un txt. el txt me viene así, 0002254866villaruel garcia paco blablabla   blablabla.

he tenido que meter los datos a una matriz b. Para darle un formato correcto.

0002254866  villaruel garcia paco bla     blabla     blabla  bla.

la matriz quedaría algo asi b(i,200) = i filas, 200 columnas.

a cosa es que ahora me gustaría escribir todas las filas(i) en otro txt distinto al que tengo...
y no se como hacerlo.

Gracias por el link ticktack pero no me deja abrirlo porque detecta que no es seguro....

Muchas gracias por colaborar en mi problema.
UN SALUDO DE VUESTRO AMIGO Y VECINO,
PETETE;)

TickTack

Hola PETTETE,

Citar
he tenido que meter los datos a una matriz b.

Me puedes pasar el codigo, por favor?

Citar
en otro txt distinto al que tengo

De que maneras debe ser el archivo .txt distinto de este archivo .txt:?

0002254866villaruel garcia paco blablabla   blablabla.

Citar
Gracias por el link ticktack pero no me deja abrirlo porque detecta que no es seguro....

Que navegador usas? Porque yo no tengo problema en descargarlo.

Saludos!
Citar
"Ninguna mentira puede inventarse lo suficientemente patán: el pueblo hispanohablante la cree. Por una consigna que se les dio, persiguieron a sus compatriotas con mayor encarnizamiento que a sus verdaderos enemigos."

PETTETE

Buenas, ahora mismo te paso el codigo. Utilizo el mozilla firefox.
En el codigo hay un streamwriter que no se si está bien... lo he puesto porque llevo 2 dias intentando hacer esto  no se como hacerlo..


Dim txt As String
        Dim leertxt As StreamReader
        Dim linealeida As String
        Dim escritor As StreamWriter


        txt = "C:\Users\JonAnder\Desktop\información.txt"
        leertxt = File.OpenText(txt)
        escritor = My.Computer.FileSystem.OpenTextFileWriter("C:\Users\JonAnder\Desktop\nuevotxt.txt", False)

        linealeida = " "
        Do Until linealeida Is Nothing
            linealeida = leertxt.ReadLine
            Console.WriteLine(linealeida)
        Loop
        Console.ReadLine()

        Dim b() As String = System.IO.File.ReadAllLines(txt, System.Text.Encoding.GetEncoding(1252)) ' la matriz b lee TXT y lo descodifica con el 1252
        Dim numreg As Integer = b.GetUpperBound(0) ' numreg cuenta cuantos elementos tiene la matriz (numreg=numero maximo de lineas)
        Dim bsalida(numreg, 200) As String ' la matriz bsalida tiene ( numreg (filas) y 200 columnas)

        For i = 0 To numreg ' por cada i en numreg.

            Dim linea As String = b(i) ' decimos que linea es cada i en b


            'ASIGNAR LA ENUMERACION AL ARRAY
            bsalida(i, c0.Navarra_101_Secuencia) = linea.Substring(0, 7) ' asignamos unas medidas a cada columna del array bsalida
            bsalida(i, c0.Navarra_102_Cod_Centro_Propuesta) = linea.Substring(7, 15)
            bsalida(i, c0.Navarra_103_Año_Propuesta) = linea.Substring(15, 19)
            bsalida(i, c0.Navarra_104_Nivel) = linea.Substring(19, 21)
            bsalida(i, c0.Navarra_105_Tipo_Doc) = linea.Substring(21, 22)
            bsalida(i, c0.Navarra_106_Centro_Propuesta) = linea.Substring(22, 25)
            bsalida(i, c0.Navarra_107_Centro_Orden_Propuesta) = linea.Substring(25, 29)
            bsalida(i, c0.Navarra_108_Fecha_Envio) = linea.Substring(29, 37)
            bsalida(i, c0.Navarra_109_Apellido1) = linea.Substring(37, 87)
            bsalida(i, c0.Navarra_110_Apellido2) = linea.Substring(87, 137)
            bsalida(i, c0.Navarra_111_Nombre) = linea.Substring(137, 187)
            bsalida(i, c0.Navarra_112_DNI) = linea.Substring(187, 198)
            bsalida(i, c0.Navarra_113_sexo) = linea.Substring(198, 199)
            bsalida(i, c0.Navarra_114_Cod_Provincia_Nacimiento) = linea.Substring(199, 201)
            bsalida(i, c0.Navarra_115_Cod_Municipio) = linea.Substring(201, 206)
            bsalida(i, c0.Navarra_116_Municipio_Nacimiento) = linea.Substring(206, 254)
            bsalida(i, c0.Navarra_117_Pais_Nacimiento) = linea.Substring(254, 257)
            bsalida(i, c0.Navarra_118_Nacionalidad) = linea.Substring(257, 260)
            bsalida(i, c0.Navarra_119_Fecha_Nacimiento) = linea.Substring(260, 268)
            bsalida(i, c0.Navarra_120_Fecha_Fin_Estudios) = linea.Substring(268, 274)
            bsalida(i, c0.Navarra_121_Cod_Calificacion) = linea.Substring(274, 276)
            bsalida(i, c0.Navarra_122_Rama) = linea.Substring(276, 280)
            bsalida(i, c0.Navarra_123_Expediente) = linea.Substring(280, 281)
            bsalida(i, c0.Navarra_124_Fecha_Pago) = linea.Substring(281, 289)
            bsalida(i, c0.Navarra_125_Num_Titulo_Original_Duplicado) = linea.Substring(289, 301)
            bsalida(i, c0.Navarra_126_Num_Autonomico_Titulo) = linea.Substring(301, 313)
            bsalida(i, c0.Navarra_127_Num_Lote_Prop_Erronea) = linea.Substring(313, 316)
            bsalida(i, c0.Navarra_128_Secuencia_Propuesta_Erronea) = linea.Substring(316, 323)
            bsalida(i, c0.Navarra_129_Estudios) = linea.Substring(323, 324)
            bsalida(i, c0.Navarra_130_Identificacion) = linea.Substring(324, 325)
            bsalida(i, c0.Navarra_131_Cod_Estudios) = linea.Substring(326, 337)
            bsalida(i, c0.Navarra_132_Fecha_Exped_Titulo_Original) = linea.Substring(337, 345)
            bsalida(i, c0.Navarra_133_Cod_Centro_Fin_Estudios) = linea.Substring(345, 353)
            bsalida(i, c0.Navarra_134_Nota) = linea.Substring(353, 357)
        Next
         for each linea in b
         escritor.writeline(linealeida)
         next
UN SALUDO DE VUESTRO AMIGO Y VECINO,
PETETE;)

TickTack

Hola PETTETE,

ahhh.... pense que era en C#. Porque en Visual Basic nunca hice nada y no se nada de nada.

Lamento que no sepa ayudarte en este caso. Yo crei que tu codigo estaba en C#.

Saludos!
Citar
"Ninguna mentira puede inventarse lo suficientemente patán: el pueblo hispanohablante la cree. Por una consigna que se les dio, persiguieron a sus compatriotas con mayor encarnizamiento que a sus verdaderos enemigos."

PETTETE

ouch... vaya putada.. ajjajaa pero bueno de todas formas gracias por intentar solucionarme el problema!
UN SALUDO DE VUESTRO AMIGO Y VECINO,
PETETE;)

Serapis

Cita de: PETTETE en  9 Mayo 2017, 07:20 AM
tengo un txt. el txt me viene así, 0002254866villaruel garcia paco blablabla   blablabla.
he tenido que meter los datos a una matriz b. Para darle un formato correcto.
0002254866  villaruel garcia paco bla     blabla     blabla  bla.

la matriz quedaría algo asi b(i,200) = i filas, 200 columnas.

a cosa es que ahora me gustaría escribir todas las filas(i) en otro txt distinto al que tengo... y no se como hacerlo.
Bien, entonces tenías un fichero sin formato en el mismo, pero con un formato no implícito y (supongo que por claridad a la hora de consultarlo) ahora quieres guardar todos los datos de nuevo a otro fichero, pero manteniendo algún tipo de formato, ¿es así?.

Luego señalas que son 200 columnas... pero viendo el código que has puesto más abajo (salvo que hayas omitido parte por extensión), solo tienes 34 columnas (Navarra_101 hasta Navarra_134), tampoco es que corresponda al número de caracteres de cada línea, pués la última apunta al carácter 357 ( ...c0.Navarra_134_Nota) = linea.Substring(353, 357))

Ya te digo que si quieres escribir toda las 'i', estarás escribiendo todas las filas, es decir todo el contenido... salvo que estés refiriendo a escribir todas las filas para una determinada columna.

El código que tienes es una ensalada de cardo borriquero, le falta un toque para pasarlo de procedimental a objetos y proveer métodos acorde a lo que quieras hacer...

Ahora tengo que salir, a la noche si me has respondido (aclarado el punto que te señalo más arriba), te oriento...

PETTETE

Buenas,
lo primero, gracia por contestar.

Lo segundo, si quiero guardar ese fichero txt o esa matriz en otro fichero.
La cosa es que queria guardarlo en otro txt pero he pensado que por aprender, voy a intentar guardarlo en un excel...¿ sabeis como puedo hacerlo?

Un saludo de vuestro amigo y vecino,
PETETE;)
UN SALUDO DE VUESTRO AMIGO Y VECINO,
PETETE;)