Hola, recientemente que estado programando bajo la api de Windows programando algo parecido a un bloc de notas, me he encontrado con el problema de que al abrir un archivo, leer su contenido y ponerlo en mi control edit los saltos de line no aparecen, ya he buscado alguna solución a este problema en Google y la documentación de MSDN pero no he hallado nada
Al parecer cuando escribo texto en el control edit y lo guardo, y después abro el archivo en el bloc de notas me aparecen dos saltos de linea
Podrían por favor ayudarme a visualizar una salto de linea en un control edit y guardarlo como tal sin que se repita el salto de linea
Perdón si escribo mal o no me explico bien, es que soy nuevo
Gracias por adelantado
Hola, el uso correcto del salto de línea es:
\r\n
Tendrías que fijarte en tu código cómo está guardando los datos que ingresas en la caja de edit, que el nombre sería TextBox.
Por otro lado podrías depurar los datos guardados para mostrarlos por ejemplo por consola y ver en crudo como está el texto, por ejemplo normal sería:
Argentina
España
Chile
Colombia
Ecuador
Venezuela
Uruguay
Mexico
mostrado en raw (crudo) sería así:
Argentina\r\nEspaña\r\nChile\r\nColombia\r\nEcuador\r\nVenezuela\r\nUruguay\r\nMexico\r\n
Saludos
Por si acaso lo mas elemental: ¿Estas usando ES_MULTILINE?
¿Como estas leyendo el archivo?
Hola y gracias por responder
Respuesta a Eternal Idol:
El control edit lo creo asi:
edit2=CreateWindowEx(0, "EDIT", "", WS_BORDER|WS_CHILD|WS_VISIBLE|WS_TABSTOP|WS_VSCROLL|WS_HSCROLL|ES_MULTILINE|ES_AUTOVSCROLL|ES_AUTOHSCROLL
|ES_LEFT|ES_WANTRETURN, 0, 53, 480, 300,hwnd, (HMENU)menuop, NULL, NULL);
y leo el contenido del archivo en esta forma:
fclose(file);
file=fopen(ruta3, "r+");
char cadena[fsize(file)];
fread(cadena, 1, fsize(file), file);
SetText(hwnd, cadena);//esta funcion establece texto en mi edit
//fisize es una funcion que cree para averiguar el tamanio de un archivo
Respuesta a Daniel:
Creo que para que se muestren los saltos de linea en el edit tendria que reemplazar los caracteres \n por \t\n no?
Si es asi lo podria hacer de esta forma:
int strremplaze(char arreglo[], char elemento1[], char elemento2[], char salida[], int pos){
//strfind es una funicon que disenie para encontrar cadenas en un arreglo
//strsize mide el tamanio de una cadena
int pos1 = strfind(arreglo, elemento1, pos), size1 = strsize(elemento2), size2 = strsize(elemento1), size3 = strsize(arreglo), s=0, size4=(size3-size2+size1);
char salida1[size4];
if(pos1 != -1){
if(size1>size2){
size4=size1-size2;
}
else if(size1<size2){
size4=size2-size1;
}
for(int u=0;u<=pos1;u++){
salida1[u]=arreglo[u];
}
for(int u=pos1;u<=size1+pos1;u++){
salida1[u]=elemento2[s];
s++;
}
s=size1+pos1;
for(int u=size2+pos1;u<=size3+size4;u++){
salida1[s]=arreglo[u];
s++;
}
for(s=0;s<=strsize(salida1);s++){
salida[s]=salida1[s];
}
return size3-size4;
}
else{
return -1;
}
}
void leerContenido(){
...
fclose(file);
file=fopen(ruta3, "r+");
char cadena[fsize(file)];
fread(cadena, 1, fsize(file), file);
strremplaze(cadena, "\n", "\t\n", salida, 0);
SetText(hwnd, cadena);//esta funcion establece texto en mi edit
//fisize es una funcion que cree para averiguar el tamanio de un archivo
...
}
¿Y de donde sale el archivo?
Comproba su contenido con un editor hexadecimal (hxd por ejemplo), en Windows el salto de linea es \r\n (13 y 10). Lo ideal seria que depuraras tu codigo linea por linea y vieras que lee en la variable cadena exactamente.
https://en.wikipedia.org/wiki/Newline
Hola Eternal, gracias por ersponder
Con la informacion que saque del link que me dejaste logre mejorar el codigo y funciono perfectamente
fclose(file);
file=fopen(ruta3, "r+");
char cadena[fsize(file)+200];
strfreechar(cadena, fsize(file));
fread(cadena, 1, fsize(file), file);
int i=0;
while(strremplaze(cadena, "\n", "\r\n", cadena, i)!=-1){
i++;
}
SetText(hwnd, cadena);
Muchas gracias a Eternal Idol y Daniel por ayudarme a solucionar el problema
Bonito dia ;D
De nadas ::)
Cuidado con seguir transformando el \n una vez que ya es correcto para Windows (\r\n).