URGENTE leer enteros de un fichero d texto y pasarlos a unamatrix

21/03/2005 - 21:45 por anah | Informe spam
Hola,
aún estoy aprendiendo C# pero necesito saber cçomo puedo leer valores
enteros de un fichero de texto y generar una matriz de enteros para exportar
a EXCEL.
Cómo solución alternativa se me ocurre hacer una clase en C** que tenga como
área de datos una matriz de enteros y un fichero de texto, pero tengo mucha
curiosidad de cómo hacerlo con C#, porque se me oucrren algunas formas de
hacerlo, pero estoy segura que teine que existir una alternatifva más
viable.

gracias
anah

Preguntas similare

Leer las respuestas

#6 anah
22/03/2005 - 18:06 | Informe spam
Ya lo hago, pero la excepción me da depurando el código, quiero decir q voy
linea a linea y no me casca hasta que llego a la conversión. Ahí aún no se
sobrepasa el límite de las filas, que si bien es cierto cuenta una de más,
pero el error me da en la primera pasada. Lo de (char)null es pq el
constructor me obliga a inicializarlo así, o bien con un char[] o con *sbyte
para poder hacerlo con el carácter nulo.

Quiero decir, que no he soltao un trozo de código y lo he plantao aquí sin
intentar cosas antes, de verdad.

Entiendo que me de una excepción de desbordamiento si sobrepaso el límite de
la matriz, de hecho lo tengo así para ver que tipo de excepción produce C#.
Pero no llega a ese punto, porque como te digo salta en el primer intento de
conversión (si nos fijamos en el ejemplo qu puse, rompe cuando tiene que
convertir "23" en 23, es decir, en el primer número del fichero).

Como el string de cada línea tiene distintas longitudes, evaluo while (j <
v_strDato[i].Length), pero al final, en la matriz de enteros, todas las
filas deberían tener 5 números (es decir, tantas filas como el fichero y 5
columnas).
De hecho mi idea es leer por ejemplo la cadena "23" compuesta por dos
caracteres y convertirlo al entero 23 que ocupará la posición [0][0] en la
matriz de enteros.

No consigo llegar a ver en que lo intenta convertir porque se produce la
excepción.

"Excepción no controlada del tipo System.InvalidCastException' en
mscorlib.dll
Información adicional: La conversión especificada no es válida."

en m_intDato[i][col] = Convert.ToInt32(aux);


"Vyacheslav Popov" escribió en el mensaje
news:%
Te responderé entre lineas.

"anah" escribió en el mensaje
news:
> aux es una variable auxiliar de tipo char[] o stirng (me da el mismo
> problema) que almacena una cadena de caracteres que componen un número.
> Esta variable se convierte a entero, porque al final es lo que quiero
> tener.
> La función que he creado para traducir es la siguiente
>
> v_strDato es un vector de strings que recoge una línea por posición del
> fichero de texto
> m_intDato es una matriz de enteros donde voy a guardar los valores


enteros
> del fichero ya convertidos
> indexF es el índice de las filas del fichero y de la matriz de enteros,
> porque habrá tantas filas en la matriz como filas en el fichero)
> col es sl número de columnas en el fichero y por tanto en la matriz
>
> EJEMPLO FICHERO DATOS:TXT
> 23 45 1 17 3
> 12 34 56 11 4
> 1 2 3 4 5
> (3 filas x 5 columnas)
> v_strDato[0] = "23 45 1 17 3"
> ...
> v_strDato[2] = "1 2 3 4 5"
>
> aux va a contener la primera vez la cadena "23" que quiero convertir al
> valor 23 y guardarlo en m_intDato[0][0]
> y así sucesivamente
>
> Espero que la explicación sea suficiente y muchas gracias de antemano
>
> static void StringToInt(string [] v_strDato, out Int32 [][] m_intDato,


int
> indexF, ref int col)
>
>
>
> {
>
> m_intDato = new Int32 [indexF][];
>
> int i = 0;
>

Primer error: Sobrepasas el indice. Si indexF = 5 reservas 5 filas pero
cuentas desde 0 a 5 que es igual a 6
solucion: while (i < indexF)

> while (i <= indexF)
>
> {
>
> int j = 0;
>

Segundo error: Sobrepaso de indices.
La longitud de linea 1 2 3 4 5 = 9 caracteres es distinta a 21 22 23 24 25
15 caracteres

> while (j < v_strDato[i].Length)
>
> {
>
> col = 0;
>

La linea de abajo que segnifica? (char[])null

Bueno, empieza por depurar el codigo y luego me cuentas.
Saludos.
> string aux = new string ((char[])null);
>
>
>
> //ir sacando int por int eliminando los espacios en blanco
>
> while (v_strDato[i][j] != ' ')
>
> {
>
> aux += v_strDato[i][j];
>
> j++;
>
> }
>
>
>
> //guardar el valor en la matriz de enteros
>
> m_intDato[i][col] = Convert.ToInt32(aux); <-- AQUI ME DA LA
> EXCEPCION
>
>
>
> //avanzar a la siguiente columna de la matriz de enteros
>
> col++;
>
>
>
> //saltar los siguientes espacios en blanco hasta llegar al
>
> //siguiente valor
>
> while (v_strDato[i][j] == ' ')
>
> j++;
>
> }
>
> //siguiente posicion del array de strings
>
> i++;
>
> }
>
> }
>
>
>
>
>
>
>
>
> "Vyacheslav Popov" escribió en el mensaje
> news:%
>> Hola.
>>
>> aux se supone que es un numero? Expon algo más de codigo.
>>
>> Saludos
>>
>> "anah" escribió en el mensaje
>> news:
>> > Primero gracias por contestar :)
>> > Y bueno, esa opción ya la he probado. Lo que hago es leer el fichero


en
> un
>> > array de string (por cada posición una línea del fichero). Creo una
>> > variable
>> > auxiliar en la que voy volcando palabra a palabra (es decir, entero a
>> > entero
>> > en formato string) y la convierto a entero para guardarla en la


matriz
> de
>> > enteros. la instrucción que realiza eso es :
>> >
>> > m_intDato[i][col] = Convert.ToInt32(aux); // char [] aux
>> >
>> > Y me da una excepción al ejecutar:
>> > "Excepción no controlada del tipo 'System.InvalidCastException' en
>> > mscorlib.dll
>> > Información adicional: La conversión especificada no es válida."
>> >
>> > También me pasa si aux es de tipo string.
>> >
>> > la verdad es que no se solucionarlo aunque me esfuerzo en leer un
>> > montón
>> > de
>> > artIculos y libros.
>> > Espero q podais ayudarme
>> > muuuuuuchas gracias
>> > anah
>> >
>> >
>> > escribió en el mensaje
>> > news:25b601c52eb0$fe010a50$
>> > puedes leer linea a linea según tu fichero y luego
>> > convertir a int con clase Convert
>> >
>> > Las urgencias sobran si.
>> >
>> >
>> >>Hola,
>> >>aún estoy aprendiendo C# pero necesito saber cçomo puedo
>> > leer valores
>> >>enteros de un fichero de texto y generar una matriz de
>> > enteros para exportar
>> >>a EXCEL.
>> >>Cómo solución alternativa se me ocurre hacer una clase
>> > en C** que tenga como
>> >>área de datos una matriz de enteros y un fichero de
>> > texto, pero tengo mucha
>> >>curiosidad de cómo hacerlo con C#, porque se me oucrren
>> > algunas formas de
>> >>hacerlo, pero estoy segura que teine que existir una
>> > alternatifva más
>> >>viable.
>> >>
>> >>gracias
>> >>anah
>> >>
>> >>
>> >>.
>> >>
>> >
>> >
>>
>>
>
>


Respuesta Responder a este mensaje
#7 Vyacheslav Popov
22/03/2005 - 18:21 | Informe spam
Hola de nuevo

Creo que el problema podria estar en esta linea:
string aux = new string ((char[])null);

Intenta hacerlo del siguiente modo:
string aux = "";

Saludos.
Popov

"anah" escribió en el mensaje
news:
Ya lo hago, pero la excepción me da depurando el código, quiero decir q
voy
linea a linea y no me casca hasta que llego a la conversión. Ahí aún no se
sobrepasa el límite de las filas, que si bien es cierto cuenta una de más,
pero el error me da en la primera pasada. Lo de (char)null es pq el
constructor me obliga a inicializarlo así, o bien con un char[] o con
*sbyte
para poder hacerlo con el carácter nulo.

Quiero decir, que no he soltao un trozo de código y lo he plantao aquí sin
intentar cosas antes, de verdad.

Entiendo que me de una excepción de desbordamiento si sobrepaso el límite
de
la matriz, de hecho lo tengo así para ver que tipo de excepción produce
C#.
Pero no llega a ese punto, porque como te digo salta en el primer intento
de
conversión (si nos fijamos en el ejemplo qu puse, rompe cuando tiene que
convertir "23" en 23, es decir, en el primer número del fichero).

Como el string de cada línea tiene distintas longitudes, evaluo while (j <
v_strDato[i].Length), pero al final, en la matriz de enteros, todas las
filas deberían tener 5 números (es decir, tantas filas como el fichero y 5
columnas).
De hecho mi idea es leer por ejemplo la cadena "23" compuesta por dos
caracteres y convertirlo al entero 23 que ocupará la posición [0][0] en la
matriz de enteros.

No consigo llegar a ver en que lo intenta convertir porque se produce la
excepción.

"Excepción no controlada del tipo System.InvalidCastException' en
mscorlib.dll
Información adicional: La conversión especificada no es válida."

en m_intDato[i][col] = Convert.ToInt32(aux);


"Vyacheslav Popov" escribió en el mensaje
news:%
Te responderé entre lineas.

"anah" escribió en el mensaje
news:
> aux es una variable auxiliar de tipo char[] o stirng (me da el mismo
> problema) que almacena una cadena de caracteres que componen un
> número.
> Esta variable se convierte a entero, porque al final es lo que quiero
> tener.
> La función que he creado para traducir es la siguiente
>
> v_strDato es un vector de strings que recoge una línea por posición del
> fichero de texto
> m_intDato es una matriz de enteros donde voy a guardar los valores


enteros
> del fichero ya convertidos
> indexF es el índice de las filas del fichero y de la matriz de enteros,
> porque habrá tantas filas en la matriz como filas en el fichero)
> col es sl número de columnas en el fichero y por tanto en la matriz
>
> EJEMPLO FICHERO DATOS:TXT
> 23 45 1 17 3
> 12 34 56 11 4
> 1 2 3 4 5
> (3 filas x 5 columnas)
> v_strDato[0] = "23 45 1 17 3"
> ...
> v_strDato[2] = "1 2 3 4 5"
>
> aux va a contener la primera vez la cadena "23" que quiero convertir al
> valor 23 y guardarlo en m_intDato[0][0]
> y así sucesivamente
>
> Espero que la explicación sea suficiente y muchas gracias de antemano
>
> static void StringToInt(string [] v_strDato, out Int32 [][] m_intDato,


int
> indexF, ref int col)
>
>
>
> {
>
> m_intDato = new Int32 [indexF][];
>
> int i = 0;
>

Primer error: Sobrepasas el indice. Si indexF = 5 reservas 5 filas pero
cuentas desde 0 a 5 que es igual a 6
solucion: while (i < indexF)

> while (i <= indexF)
>
> {
>
> int j = 0;
>

Segundo error: Sobrepaso de indices.
La longitud de linea 1 2 3 4 5 = 9 caracteres es distinta a 21 22 23 24
25


>> 15 caracteres

> while (j < v_strDato[i].Length)
>
> {
>
> col = 0;
>

La linea de abajo que segnifica? (char[])null

Bueno, empieza por depurar el codigo y luego me cuentas.
Saludos.
> string aux = new string ((char[])null);
>
>
>
> //ir sacando int por int eliminando los espacios en blanco
>
> while (v_strDato[i][j] != ' ')
>
> {
>
> aux += v_strDato[i][j];
>
> j++;
>
> }
>
>
>
> //guardar el valor en la matriz de enteros
>
> m_intDato[i][col] = Convert.ToInt32(aux); <-- AQUI ME DA LA
> EXCEPCION
>
>
>
> //avanzar a la siguiente columna de la matriz de enteros
>
> col++;
>
>
>
> //saltar los siguientes espacios en blanco hasta llegar al
>
> //siguiente valor
>
> while (v_strDato[i][j] == ' ')
>
> j++;
>
> }
>
> //siguiente posicion del array de strings
>
> i++;
>
> }
>
> }
>
>
>
>
>
>
>
>
> "Vyacheslav Popov" escribió en el mensaje
> news:%
>> Hola.
>>
>> aux se supone que es un numero? Expon algo más de codigo.
>>
>> Saludos
>>
>> "anah" escribió en el mensaje
>> news:
>> > Primero gracias por contestar :)
>> > Y bueno, esa opción ya la he probado. Lo que hago es leer el fichero


en
> un
>> > array de string (por cada posición una línea del fichero). Creo una
>> > variable
>> > auxiliar en la que voy volcando palabra a palabra (es decir, entero
>> > a
>> > entero
>> > en formato string) y la convierto a entero para guardarla en la


matriz
> de
>> > enteros. la instrucción que realiza eso es :
>> >
>> > m_intDato[i][col] = Convert.ToInt32(aux); // char [] aux
>> >
>> > Y me da una excepción al ejecutar:
>> > "Excepción no controlada del tipo 'System.InvalidCastException' en
>> > mscorlib.dll
>> > Información adicional: La conversión especificada no es válida."
>> >
>> > También me pasa si aux es de tipo string.
>> >
>> > la verdad es que no se solucionarlo aunque me esfuerzo en leer un
>> > montón
>> > de
>> > artIculos y libros.
>> > Espero q podais ayudarme
>> > muuuuuuchas gracias
>> > anah
>> >
>> >
>> > escribió en el mensaje
>> > news:25b601c52eb0$fe010a50$
>> > puedes leer linea a linea según tu fichero y luego
>> > convertir a int con clase Convert
>> >
>> > Las urgencias sobran si.
>> >
>> >
>> >>Hola,
>> >>aún estoy aprendiendo C# pero necesito saber cçomo puedo
>> > leer valores
>> >>enteros de un fichero de texto y generar una matriz de
>> > enteros para exportar
>> >>a EXCEL.
>> >>Cómo solución alternativa se me ocurre hacer una clase
>> > en C** que tenga como
>> >>área de datos una matriz de enteros y un fichero de
>> > texto, pero tengo mucha
>> >>curiosidad de cómo hacerlo con C#, porque se me oucrren
>> > algunas formas de
>> >>hacerlo, pero estoy segura que teine que existir una
>> > alternatifva más
>> >>viable.
>> >>
>> >>gracias
>> >>anah
>> >>
>> >>
>> >>.
>> >>
>> >
>> >
>>
>>
>
>






Respuesta Responder a este mensaje
#8 anah
23/03/2005 - 11:04 | Informe spam
hola de nuevo,

He inicializado el string con "" en vez de usar el constructor. El problema
es que me sigue fallando en la conversión, exactamente en el mismo punto y
en la primera iteración, aunque ahora la excepción es

"Excepción no controlada del tipo 'System.NullReferenceException' en
PruebaLeerFichero.exe
Información adicional: Referencia a objeto no establecida como instancia de
un objeto."

Creo que el problema está en la definición de m_intDato porque no lo
entiende. No me deja darle dimensión proque decide que está fuera del límite
para el puntero o matrix m_intDato. Creo que no tengo muy claro como se
declaran en C# matrices de enteros, aunque no me parece que sea complicado,
vamos
Antes de entrar en la función StringToInt hago :

Int32 [][] m_intDato = new Int32[fil][]; //NO ME DEJA PONERLE DIMENSION A
LA COLUMNA

y también he probado simplemente
Int32 [][] m_intDato;

y luego directamente llamo a la función StringToInt

De las dos formas me da el mismo problema. Así que es normal que me de una
excepción del tipo que me da porque no puede acceder al objeto m_intDato.
BUAAAAAAAAA .
Me da rabia que algo tan sencillo me esté ocasionando tantos problemas :(

Bueno, gracias por contestar a todo y tan rápido, te lo agradezco mucho :>
anah :>




Pero no se a que objeto se refiere... Me cuesta entender un poco aún los
mensajes de C#, aunque supongo que con el tiempo esto ya no será un problema


"Vyacheslav Popov" escribió en el mensaje
news:%
Hola de nuevo

Creo que el problema podria estar en esta linea:
string aux = new string ((char[])null);

Intenta hacerlo del siguiente modo:
string aux = "";

Saludos.
Popov

"anah" escribió en el mensaje
news:
> Ya lo hago, pero la excepción me da depurando el código, quiero decir q
> voy
> linea a linea y no me casca hasta que llego a la conversión. Ahí aún no


se
> sobrepasa el límite de las filas, que si bien es cierto cuenta una de


más,
> pero el error me da en la primera pasada. Lo de (char)null es pq el
> constructor me obliga a inicializarlo así, o bien con un char[] o con
> *sbyte
> para poder hacerlo con el carácter nulo.
>
> Quiero decir, que no he soltao un trozo de código y lo he plantao aquí


sin
> intentar cosas antes, de verdad.
>
> Entiendo que me de una excepción de desbordamiento si sobrepaso el


límite
> de
> la matriz, de hecho lo tengo así para ver que tipo de excepción produce
> C#.
> Pero no llega a ese punto, porque como te digo salta en el primer


intento
> de
> conversión (si nos fijamos en el ejemplo qu puse, rompe cuando tiene que
> convertir "23" en 23, es decir, en el primer número del fichero).
>
> Como el string de cada línea tiene distintas longitudes, evaluo while (j


<
> v_strDato[i].Length), pero al final, en la matriz de enteros, todas las
> filas deberían tener 5 números (es decir, tantas filas como el fichero y


5
> columnas).
> De hecho mi idea es leer por ejemplo la cadena "23" compuesta por dos
> caracteres y convertirlo al entero 23 que ocupará la posición [0][0] en


la
> matriz de enteros.
>
> No consigo llegar a ver en que lo intenta convertir porque se produce la
> excepción.
>
> "Excepción no controlada del tipo System.InvalidCastException' en
> mscorlib.dll
> Información adicional: La conversión especificada no es válida."
>
> en m_intDato[i][col] = Convert.ToInt32(aux);
>
>
> "Vyacheslav Popov" escribió en el mensaje
> news:%
>> Te responderé entre lineas.
>>
>> "anah" escribió en el mensaje
>> news:
>> > aux es una variable auxiliar de tipo char[] o stirng (me da el mismo
>> > problema) que almacena una cadena de caracteres que componen un
>> > número.
>> > Esta variable se convierte a entero, porque al final es lo que quiero
>> > tener.
>> > La función que he creado para traducir es la siguiente
>> >
>> > v_strDato es un vector de strings que recoge una línea por posición


del
>> > fichero de texto
>> > m_intDato es una matriz de enteros donde voy a guardar los valores
> enteros
>> > del fichero ya convertidos
>> > indexF es el índice de las filas del fichero y de la matriz de


enteros,
>> > porque habrá tantas filas en la matriz como filas en el fichero)
>> > col es sl número de columnas en el fichero y por tanto en la matriz
>> >
>> > EJEMPLO FICHERO DATOS:TXT
>> > 23 45 1 17 3
>> > 12 34 56 11 4
>> > 1 2 3 4 5
>> > (3 filas x 5 columnas)
>> > v_strDato[0] = "23 45 1 17 3"
>> > ...
>> > v_strDato[2] = "1 2 3 4 5"
>> >
>> > aux va a contener la primera vez la cadena "23" que quiero convertir


al
>> > valor 23 y guardarlo en m_intDato[0][0]
>> > y así sucesivamente
>> >
>> > Espero que la explicación sea suficiente y muchas gracias de antemano
>> >
>> > static void StringToInt(string [] v_strDato, out Int32 [][]


m_intDato,
> int
>> > indexF, ref int col)
>> >
>> >
>> >
>> > {
>> >
>> > m_intDato = new Int32 [indexF][];
>> >
>> > int i = 0;
>> >
>>
>> Primer error: Sobrepasas el indice. Si indexF = 5 reservas 5 filas pero
>> cuentas desde 0 a 5 que es igual a 6
>> solucion: while (i < indexF)
>>
>> > while (i <= indexF)
>> >
>> > {
>> >
>> > int j = 0;
>> >
>>
>> Segundo error: Sobrepaso de indices.
>> La longitud de linea 1 2 3 4 5 = 9 caracteres es distinta a 21 22 23 24
>> 25
> > >> 15 caracteres
>>
>> > while (j < v_strDato[i].Length)
>> >
>> > {
>> >
>> > col = 0;
>> >
>>
>> La linea de abajo que segnifica? (char[])null
>>
>> Bueno, empieza por depurar el codigo y luego me cuentas.
>> Saludos.
>> > string aux = new string ((char[])null);
>> >
>> >
>> >
>> > //ir sacando int por int eliminando los espacios en blanco
>> >
>> > while (v_strDato[i][j] != ' ')
>> >
>> > {
>> >
>> > aux += v_strDato[i][j];
>> >
>> > j++;
>> >
>> > }
>> >
>> >
>> >
>> > //guardar el valor en la matriz de enteros
>> >
>> > m_intDato[i][col] = Convert.ToInt32(aux); <-- AQUI ME DA


LA
>> > EXCEPCION
>> >
>> >
>> >
>> > //avanzar a la siguiente columna de la matriz de enteros
>> >
>> > col++;
>> >
>> >
>> >
>> > //saltar los siguientes espacios en blanco hasta llegar al
>> >
>> > //siguiente valor
>> >
>> > while (v_strDato[i][j] == ' ')
>> >
>> > j++;
>> >
>> > }
>> >
>> > //siguiente posicion del array de strings
>> >
>> > i++;
>> >
>> > }
>> >
>> > }
>> >
>> >
>> >
>> >
>> >
>> >
>> >
>> >
>> > "Vyacheslav Popov" escribió en el mensaje
>> > news:%
>> >> Hola.
>> >>
>> >> aux se supone que es un numero? Expon algo más de codigo.
>> >>
>> >> Saludos
>> >>
>> >> "anah" escribió en el mensaje
>> >> news:
>> >> > Primero gracias por contestar :)
>> >> > Y bueno, esa opción ya la he probado. Lo que hago es leer el


fichero
> en
>> > un
>> >> > array de string (por cada posición una línea del fichero). Creo


una
>> >> > variable
>> >> > auxiliar en la que voy volcando palabra a palabra (es decir,


entero
>> >> > a
>> >> > entero
>> >> > en formato string) y la convierto a entero para guardarla en la
> matriz
>> > de
>> >> > enteros. la instrucción que realiza eso es :
>> >> >
>> >> > m_intDato[i][col] = Convert.ToInt32(aux); // char [] aux
>> >> >
>> >> > Y me da una excepción al ejecutar:
>> >> > "Excepción no controlada del tipo 'System.InvalidCastException' en
>> >> > mscorlib.dll
>> >> > Información adicional: La conversión especificada no es válida."
>> >> >
>> >> > También me pasa si aux es de tipo string.
>> >> >
>> >> > la verdad es que no se solucionarlo aunque me esfuerzo en leer un
>> >> > montón
>> >> > de
>> >> > artIculos y libros.
>> >> > Espero q podais ayudarme
>> >> > muuuuuuchas gracias
>> >> > anah
>> >> >
>> >> >
>> >> > escribió en el mensaje
>> >> > news:25b601c52eb0$fe010a50$
>> >> > puedes leer linea a linea según tu fichero y luego
>> >> > convertir a int con clase Convert
>> >> >
>> >> > Las urgencias sobran si.
>> >> >
>> >> >
>> >> >>Hola,
>> >> >>aún estoy aprendiendo C# pero necesito saber cçomo puedo
>> >> > leer valores
>> >> >>enteros de un fichero de texto y generar una matriz de
>> >> > enteros para exportar
>> >> >>a EXCEL.
>> >> >>Cómo solución alternativa se me ocurre hacer una clase
>> >> > en C** que tenga como
>> >> >>área de datos una matriz de enteros y un fichero de
>> >> > texto, pero tengo mucha
>> >> >>curiosidad de cómo hacerlo con C#, porque se me oucrren
>> >> > algunas formas de
>> >> >>hacerlo, pero estoy segura que teine que existir una
>> >> > alternatifva más
>> >> >>viable.
>> >> >>
>> >> >>gracias
>> >> >>anah
>> >> >>
>> >> >>
>> >> >>.
>> >> >>
>> >> >
>> >> >
>> >>
>> >>
>> >
>> >
>>
>>
>
>


Respuesta Responder a este mensaje
#9 Carlos García-Carazo
23/03/2005 - 12:31 | Informe spam
Hola,
a simple vista parece que estás intentando usar las matrices de C# al estilo de C++.
Como recordarás, en C++ podías reservar un espacio de DimX * DimY lineal
y luego currarte el acceso de 2 dimensiones (x, y) de la manera
dato = array[ y * dimX + x]
o bien reservar un "array de arrays", matriz[y][x], donde debías reservar un array
de dimensión "x" para cada elemento matriz[y].

Pues bién, esto en C# se llama Matriz Escalonada y es lo que estás pretendiendo usar.
El problema es que no estás reservando la dimensión de cada "escalón", como hacíamos
en C++.
Echa un vistazo a
http://msdn.microsoft.com/library/s...torial.asp

Es decir, te falta algo así:
for (int i = 0; i < fil; i++)
m_intDato[i] = new int[kMaxVal]

(nota: la dimensión de cada submatriz no tiene que ser la misma, de ahí que se le llame "escalonada")
De cualquier forma si lo que querías era reservar una tabla de dos dimensiones, a lo mejor
esto es lo que buscabas:
Int32 [,] m_intDato = new Int32[DimX, DimY];
m_intDato[2, 1] = 0;

Mira el enlace y navega un poco por ahí y la ayuda del IDE, que otras cosas no, pero esto viene
bastante bién explicado.
Salu2

Creo que el problema está en la definición de m_intDato porque no lo
entiende. No me deja darle dimensión proque decide que está fuera del límite
para el puntero o matrix m_intDato. Creo que no tengo muy claro como se
declaran en C# matrices de enteros, aunque no me parece que sea complicado,
vamos
Antes de entrar en la función StringToInt hago :

Int32 [][] m_intDato = new Int32[fil][]; //NO ME DEJA PONERLE DIMENSION A
LA COLUMNA

y también he probado simplemente
Int32 [][] m_intDato;

y luego directamente llamo a la función StringToInt

De las dos formas me da el mismo problema. Así que es normal que me de una
excepción del tipo que me da porque no puede acceder al objeto m_intDato.
BUAAAAAAAAA .
Me da rabia que algo tan sencillo me esté ocasionando tantos problemas :(
Respuesta Responder a este mensaje
#10 anah
23/03/2005 - 13:09 | Informe spam
GENIAL!!!!!!!!!!!!!!

Muchas gracias :> era eso. Sigue dándome excepción pero porque me salgo del
rango de la matriz. Ya me convierte los stirngs :>
Y si, intentaba usar las matrices como en C++, de hecho vengo de estar
programando en C++ y algunas cosas cuestan pensarlas en C# al empezar :>
pero espero hacerme con ello

gracias otra vez
anah:>


"Carlos García-Carazo" escribió en el mensaje
news:
Hola,
a simple vista parece que estás intentando usar las matrices de C# al


estilo de C++.
Como recordarás, en C++ podías reservar un espacio de DimX * DimY lineal
y luego currarte el acceso de 2 dimensiones (x, y) de la manera
dato = array[ y * dimX + x]
o bien reservar un "array de arrays", matriz[y][x], donde debías reservar


un array
de dimensión "x" para cada elemento matriz[y].

Pues bién, esto en C# se llama Matriz Escalonada y es lo que estás


pretendiendo usar.
El problema es que no estás reservando la dimensión de cada "escalón",


como hacíamos
en C++.
Echa un vistazo a



http://msdn.microsoft.com/library/s...torial.asp

Es decir, te falta algo así:
for (int i = 0; i < fil; i++)
m_intDato[i] = new int[kMaxVal]

(nota: la dimensión de cada submatriz no tiene que ser la misma, de ahí


que se le llame "escalonada")
De cualquier forma si lo que querías era reservar una tabla de dos


dimensiones, a lo mejor
esto es lo que buscabas:
Int32 [,] m_intDato = new Int32[DimX, DimY];
m_intDato[2, 1] = 0;

Mira el enlace y navega un poco por ahí y la ayuda del IDE, que otras


cosas no, pero esto viene
bastante bién explicado.
Salu2

> Creo que el problema está en la definición de m_intDato porque no lo
> entiende. No me deja darle dimensión proque decide que está fuera del


límite
> para el puntero o matrix m_intDato. Creo que no tengo muy claro como se
> declaran en C# matrices de enteros, aunque no me parece que sea


complicado,
> vamos
> Antes de entrar en la función StringToInt hago :
>
> Int32 [][] m_intDato = new Int32[fil][]; //NO ME DEJA PONERLE DIMENSION


A
> LA COLUMNA
>
> y también he probado simplemente
> Int32 [][] m_intDato;
>
> y luego directamente llamo a la función StringToInt
>
> De las dos formas me da el mismo problema. Así que es normal que me de


una
> excepción del tipo que me da porque no puede acceder al objeto


m_intDato.
> BUAAAAAAAAA .
> Me da rabia que algo tan sencillo me esté ocasionando tantos problemas


:(


Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida