La Web del Programador: Comunidad de Programadores
 
    Pregunta:  183 - ARREGLOS EN CLIPPER
Autor:  Julio
Es una pregunta tan simple que me da pena preguntar. He tenido muchos problemas para manipular los arreglos en Clipper, los indices son un problema. Para ser concretos el siguiente código ejemplo:
File:=MEMOREAD(Archivo)
i:=1
DO WHILE File[i]!=EOF
File[i++]:=File[i]-1
END DO
MEMOEDIT(File,y1+1,x1+1,y2-1,x2-1,.F.)
Me marca el error ´Error de Argumento: array acces´ (en lenguaje C se trata las cadenas como arreglos), como lo soluciono o cual es el problema? Gracias

  Respuesta:  Juan Reyes
http://members.xoom.com/jonysoft http://members.xoom.com/manuales Tu problema amigo es que tratas de ver Clipper como si fuese C o C++, pero existen unas diferencias, una de las cuales es el tratamiento de los arreglos.
La función MEMOREAD no retorna un arreglo, retorna una cadena de caracteres, que será de máximo 65535 caracteres ( 64K ), si el archivo a leer es mayor a esto te dará un error.
Como ejemplo, si deseas recorrer la cadena y mostrarla por pantalla :
Local nI := 1
Local cArchivo := MEMOREAD( "Juan.Txt" )
Local nLargo := Len( cArchivo )
For nI := 1 To nLargo
.. cCar := SubStr( cArchivo, nI, 1 )
.. ? cCar
Next nI
Una cadena de caracteres en Clipper no se trata como un arreglo, sinó como una cadena.

  Respuesta:  Pepo
Me parece que el problema es que inicializas el indice a 1, creo que lo tienes que hacer a 0. El error debe ser que al estar incializado a uno cuando llega al ultimo elemento del vector quiere acceder a una posción mas.
Saludos :-)