PDA

Ver la Versión Completa : Mantener Formato de HTML


BlackDaemon
25-10-2007, 07:01:05
Buenas noches

Aqui, otra vez con mis preguntas jeje, ahora estoy haciendo una aplicación para guardarme las tabladuras de la página http://www.lacuerda.net, para asi guardarlas en una DB (por cierto uso paradox 7)

La idea es la siguiente, agregar la URL en un edit, pulsar un botón y que parsee el HTML, guarde los datos extraidos de todo el código HTML, vamos a poner un ejemplo, este link http://lacuerda.net/tabs/m/mana/amam..._muera-4.shtml

Si se fijan hay títulos, nombre de canción, artista, etc


Maná
Amame hasta que me muera
AUTOR: Fher
ALBUM: Sue~os Liquido (1997)


Y lo mas importante la letra de la canción con la tabladura, ahora he creado mi tabla de la siguiente manera, Artista, Cancion, Autor, Album, links -> Tipo Alpha de 100 caracteres (links es donde se va guardar el links, este para que no se repita el mismo)
y ahora ¿Donde guardaría la letra? ah si, pues que solo el campo Alpha solo es hasta 255 caracteres me vi obligado a usar el campo Memo, ya creo que esta bien mi tabla.

Ahora la aplicación hasta el momento esta funcionando bien, peeeero el problema es mostrar los datos, y si, ya tengo un tema parecido a este por aqui mismo, donde el #0 corta la cadena y no deja visualizar en el DBMemo, o es que no agrega todo el contenido ?

Una imagen vale mas que mil palabras, cuando estoy debunguendo (o como se llame, no sé )

http://img180.imageshack.us/img180/7214/errorfw6.jpg

Me salen un montón de caracteres raros, mirando en una tabla de HTML ASCII -> http://www.w3schools.com/tags/ref_ascii.asp no logré encontrar que eran esos caracteres, tambien hay comillas simples, probé con un


StringReplace(Codigo, '''', '', [rfReplaceAll]);


y con un


StringReplace(Letra.Text,'#$d#$A','#13', [rfReplaceAll]);


Pero sin resultados buenos, en la parte de #$d#$A jugué un poco con los caracteres, pero no le hace caso y se lo pasa por el ... xD

Ahora mi pregunta es, como podría guardar, y luego mostrar TODO lo que esta dentro de la etiqueta < PRE > < / PRE > ?

Ya que creo que lo hago correctamente, pero no logro poder visualizarlo en el DBMemo, puede ser el problema parecido al anterior, pero no puedo darme cuanta, ya que no es igual no hay el #0 (que lo parió) que corte la cadena, entonces que la corta ? O es que no la guarda ? o simplemente el Memo no quiero mostrarlo?

Aqui les dejo una parte del código, algo chapuzo, pero estoy aprendiendo


procedure TFPrincipal.BGuardarClick(Sender: TObject);
var
Codigo : String;
Letra : TStringList;
Artista, Titulo, Autor, Album : String;
begin
//Codigo := TStringList.Create;

try
Codigo := IdHTTP1.Get(ELink.Text);
Artista := CopiarEntre(Codigo, 'class=tran1>', '
');
Titulo := CopiarEntre(Codigo, 'COLOR=#b00000>', '

Neftali [Germán.Estévez]
25-10-2007, 09:47:37
Los caracteres que te están apareciendo son el CR y LF (salto de carro y final de línea), que corresponden al #10 y #13.
Puedes usar el StringReplace si quieres con estos.

BlackDaemon
09-11-2007, 00:59:48
Hola, ya he intentado con replace, pero ni caso le hace, sigue sin mostrar nada en el DBMemo

Saludos

PD, por cierto que a pasado con las etiquetas DELPHI ? en todos los subfotros veo que ya no sirven:S

Neftali [Germán.Estévez]
09-11-2007, 10:37:48
PD, por cierto que a pasado con las etiquetas DELPHI ? en todos los subfotros veo que ya no sirven:S

Se restaurarán en breve; La última actualización de vBulletin que se acaba de hacer se las ha cargado...:(:(:(

BlackDaemon
07-03-2008, 02:11:33
buenas, quize abrir otro tema con el mismo problema y prefería seguir este, ya que trata de lo mismo, vamos otra vez estoy intentando hacer mi aplicaicón :D

Ya, el problema es el siguiente, no sé por que no me deja guardar parte del código html que genera la página de alguna pista.

Tengo mi tabla paradox con el campo memo, que es donde debería guardarse la letra con los acordes de la canción pero no lo hace, pero en este caso no se corta el código por que hay un #0 en medio ni nada, simplemente me sale un garabato en el DBMemo, ¿Por qué pasa esto?

Yo tengo una función que copia todo el texto que hay entre 2 palabras o cadenas que le pases como referencia, ahora un ejemplo.

El código fuente que genera esta página
http://lacuerda.net/tabs/m/mana/amame_hasta_que_me_muera-4.shtml
es lo que necesito parsearlo, para obtener datos de el, como título, autor, etc, eso lo consigo, pero lo que no puedo conseguir es la canción misma, osea la letra con las tabladuras :S mas concretamente lo que quiero es lo que está entre las etiquetas html <PRE> y </PRE>, no sé que caracter haga que no guarde bien, pero probé con el principio de la página, vamos a ver este código

<HTML>
<HEAD>
<TITLE>LaCuerda: Maná - Amame hasta que me muera</TITLE>
<META content="text/html; charset=iso-8859-1" http-equiv=Content-Type>
<LINK href="/estilo.php" rel="stylesheet" type="text/css">
</HEAD>

<script language=JavaScript src="/scroll.php"></script>

<BODY aLink=#A00000 bgColor=#d0d0d0 topmargin=5 leftmargin=0 background="/Gifs/?i=fondo">

Función copiarentre

function TFPrincipal.CopiarEntre(var Cadena:AnsiString; Desde, Hasta:string):string;
var
Inicio, Final: integer;
begin
Result := '';
Inicio := Pos(Desde, Cadena) + Length(Desde);
Final := PosEx(Hasta, Cadena, Inicio);
if Inicio = length(Desde) then Exit;
if (Inicio > 0) and (Final > Inicio) then begin
Result := Copy(Cadena, Inicio, Final-Inicio );
Delete(Cadena,1,Inicio);
end;
end;

Por ejemplo si yo le pongo copiarentre(codigoHTML, '<HTML>', 'scroll.php');
Lo hace correctamente, en el DBMemo me sale lo que está entre medio de esas cadenas, pero aquí es donde da el error yno sé por que, que es cuando uso la misma función y le pongo:
copiarentre(codigoHTML, '<HTML>','</script>');
Ahí es donde no guarda lo que tiene que ser, no sé por que pasa eso, supongo que hay un caracter en esa línea que hace que falle todo, pero no supe cual era, bueno solo es eso, espero me sepan ayudar


saludos!!

BlackDaemon
13-03-2008, 05:43:29
alguna idea ? me quedé aquí varado xD
podría ser que uso un string para tener todo el código fuente y que solo me guarda 255 caracteres ? qué tendría que usar ? Stringlist ? AnsiString ?
:rolleyes:
saludos!