Poque el control edit no lee lo saltos de linea

Iniciado por alienxz77b, 6 Agosto 2021, 07:05 AM

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

alienxz77b

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

Danielㅤ

#1
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
¡Regresando como cual Fenix! ~
Bomber Code © 2021 https://www.bombercode.net/foro/

Ayudas - Aportes - Tutoriales - Y mucho mas!!!

Eternal Idol

Por si acaso lo mas elemental: ¿Estas usando ES_MULTILINE?

¿Como estas leyendo el archivo?
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

alienxz77b

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
...
}

Eternal Idol

#4
¿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
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

alienxz77b

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

Eternal Idol

De nadas  ::)

Cuidado con seguir transformando el \n una vez que ya es correcto para Windows (\r\n).
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón