Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: alienxz77b en 6 Agosto 2021, 07:05 am



Título: Poque el control edit no lee lo saltos de linea
Publicado por: alienxz77b en 6 Agosto 2021, 07:05 am
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


Título: Re: Poque el control edit no lee lo saltos de linea
Publicado por: Danielㅤ en 6 Agosto 2021, 09:07 am
Hola, el uso correcto del salto de línea es:

Código:
\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:

Código:
Argentina
España
Chile
Colombia
Ecuador
Venezuela
Uruguay
Mexico


mostrado en raw (crudo) sería así:

Código:
Argentina\r\nEspaña\r\nChile\r\nColombia\r\nEcuador\r\nVenezuela\r\nUruguay\r\nMexico\r\n


Saludos


Título: Re: Poque el control edit no lee lo saltos de linea
Publicado por: Eternal Idol en 6 Agosto 2021, 09:24 am
Por si acaso lo mas elemental: ¿Estas usando ES_MULTILINE?

¿Como estas leyendo el archivo?


Título: Re: Poque el control edit no lee lo saltos de linea
Publicado por: alienxz77b en 7 Agosto 2021, 01:04 am
Hola y gracias por responder
Respuesta a Eternal Idol:
El control edit lo creo asi:
Código
  1. edit2=CreateWindowEx(0, "EDIT", "",  WS_BORDER|WS_CHILD|WS_VISIBLE|WS_TABSTOP|WS_VSCROLL|WS_HSCROLL|ES_MULTILINE|ES_AUTOVSCROLL|ES_AUTOHSCROLL
  2. |ES_LEFT|ES_WANTRETURN, 0, 53, 480, 300,hwnd, (HMENU)menuop, NULL, NULL);
y leo el contenido del archivo en esta forma:
Código
  1. fclose(file);
  2. file=fopen(ruta3, "r+");
  3. char cadena[fsize(file)];
  4. fread(cadena, 1, fsize(file), file);
  5. SetText(hwnd, cadena);//esta funcion establece texto en mi edit
  6. //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:

Código
  1. int strremplaze(char arreglo[], char elemento1[], char elemento2[], char salida[], int pos){
  2. //strfind es una funicon que disenie para encontrar cadenas en un arreglo
  3. //strsize mide el tamanio de una cadena
  4.    int pos1 = strfind(arreglo, elemento1, pos), size1 = strsize(elemento2), size2 = strsize(elemento1), size3 = strsize(arreglo), s=0, size4=(size3-size2+size1);
  5.    char salida1[size4];
  6.    if(pos1 != -1){
  7.            if(size1>size2){
  8.                size4=size1-size2;
  9.            }
  10.            else if(size1<size2){
  11.                size4=size2-size1;
  12.            }
  13.    for(int u=0;u<=pos1;u++){
  14.            salida1[u]=arreglo[u];
  15.    }
  16.    for(int u=pos1;u<=size1+pos1;u++){
  17.            salida1[u]=elemento2[s];
  18.            s++;
  19.    }
  20.            s=size1+pos1;
  21.    for(int u=size2+pos1;u<=size3+size4;u++){
  22.            salida1[s]=arreglo[u];
  23.            s++;
  24.    }
  25.    for(s=0;s<=strsize(salida1);s++){
  26.        salida[s]=salida1[s];
  27.    }
  28.    return size3-size4;
  29.    }
  30.    else{
  31.        return -1;
  32.    }
  33. }
  34.  
  35. void leerContenido(){
  36. ...
  37. fclose(file);
  38. file=fopen(ruta3, "r+");
  39. char cadena[fsize(file)];
  40. fread(cadena, 1, fsize(file), file);
  41. strremplaze(cadena, "\n", "\t\n", salida, 0);
  42. SetText(hwnd, cadena);//esta funcion establece texto en mi edit
  43. //fisize es una funcion que cree para averiguar el tamanio de un archivo
  44. ...
  45. }
  46.  


Título: Re: Poque el control edit no lee lo saltos de linea
Publicado por: Eternal Idol en 7 Agosto 2021, 01:25 am
¿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


Título: Re: Poque el control edit no lee lo saltos de linea
Publicado por: alienxz77b en 7 Agosto 2021, 02:02 am
Hola Eternal, gracias por ersponder

Con la informacion  que saque del link que me dejaste logre mejorar el codigo y funciono perfectamente

Código
  1. fclose(file);
  2. file=fopen(ruta3, "r+");
  3. char cadena[fsize(file)+200];
  4. strfreechar(cadena, fsize(file));
  5. fread(cadena, 1, fsize(file), file);
  6. int i=0;
  7. while(strremplaze(cadena, "\n", "\r\n", cadena, i)!=-1){
  8. i++;
  9. }
  10. SetText(hwnd, cadena);
  11.  
Muchas gracias a Eternal Idol y Daniel por ayudarme a solucionar el problema
Bonito dia ;D


Título: Re: Poque el control edit no lee lo saltos de linea
Publicado por: Eternal Idol en 7 Agosto 2021, 10:19 am
De nadas  ::)

Cuidado con seguir transformando el \n una vez que ya es correcto para Windows (\r\n).