FoxPro/Visual FoxPro - eliminar caracteres

 
Vista:
sin imagen de perfil
Val: 45
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

eliminar caracteres

Publicado por OMAR (23 intervenciones) el 30/04/2019 17:05:33
Hola buenas tardes a todos/as de este foro espero tengan todos un buen día.
mi consulta es relacionado a cambiar de formato un archivo .RTF A .TXT, lo cual lo hago sin inconveniente alguno. el inconveniente surge después de cambiar de formato, en el encabezado del texto aparecen unos garabatos y códigos de aproximadamente de 222 caracteres. a continuación copio un ejemplo de como queda.-

{\rtf1\ansi\ansicpg1252\deff0\deflang3082{\fonttbl{\f0\fnil\fcharset0 Microsoft Sans Serif;}}
\viewkind4\uc1\pard\f0\fs29
ESTE ES UN MENSAJE DE PRUEBA COMO EJEMPLO
}

quisiera saber si hay alguna forma de eliminar esos caracteres o si hay otro proceso para pasar de un formato a otro y evitar así esos caracteres, yo utilizo: Copy archivo.RTF to archivo.TXT

De antemano les agradezco cualquier colaboración que puedan facilitar
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 1.011
Oro
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

eliminar caracteres

Publicado por Fidel José (657 intervenciones) el 30/04/2019 21:13:25
Lo único que estás haciendo ahí es cambiarle la extensión al archivo, con lo cual no cambia su formato.
Particularmente, el caso de rtf (Rich Text Format) posee una serie de caracteres y secuencias de escape que le permiten al parser (interprete) mostrar el formato con determinada fuente, color y posición.

Puedes utlizar Microsoft Word para convertir un RTF en TXT. El código sería el siguiente;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
PROCEDURE convert_rtf_to_text_by_MsWord
*------------------------------------------------------
* tcSourceFile: Archivo de texto (rtf, doc) a convertir
* tcTargetFile: Nombre del archivo de destino (txt)
* 	Si se omite será igual a tcSourceFile
*	con la extensión txt
* No admite un archivo txt como tcSourceFile
* convert_rtf_to_text_by_MsWord devuelve .T. si encuentra el archivo convertido
* -----------------------------------------------------
LPARAMETERS tcSourceFile,tcTargetFile
TRY
	LOCAL LOEX AS EXCEPTION,;
		LCMESSAGE,;
		lREsult,;
		lcDocuments,;
		loFso as Object,;
		loWord as Object,;
		oWsh as Object,;
		loDoc as Object,;
		LOFOCUS AS OBJECT,;
		loWord_err as Exception
 
	IF VARTYPE(m.tcTargetFile) # "C"
		tcTargetFile = ""
	ENDIF
 
	oWsh = CREATEOBJECT("WScript.Shell")
	lcDocuments = oWsh.SpecialFolders("MyDocuments")
	owsh=null
 
	loFso = NEWOBJECT("Scripting.FileSystemObject")
	DO WHILE .t.
		IF EMPTY(m.tcSourceFile)
			EXIT
		ENDIF
 
		WAIT "Convirtiendo " + m.tcSourceFile + " a txt..." WINDOW AT 20,20 NOWAIT
 
		IF JUSTEXT(m.tcSourceFile) == "TXT"
			lcMessage = "SourceFile no puede ser un formato txt"
			EXIT
		ENDIF
 
		IF !loFso.FileExists(m.tcSourceFile)
			lcMessage = m.tcSourceFile + " no existe"
			EXIT
		ENDIF
 
		* Si no se pasó el nombre del archivo de destino
		IF EMPTY(m.tcTargetFile)
			tcTargetFile = ADDBS(JUSTPATH(m.tcSourceFile)) ;
					+ JUSTSTEM(m.tcSourceFile)
		ELSE
			tcTargetFile = ADDBS(JUSTPATH(m.tcTargetFile));
				+ JUSTSTEM(m.tcTargetFile)
 
		ENDIF
 
 
		TRY
			loWord = NEWOBJECT("Word.Application")
		CATCH TO loWord_err
		ENDTRY
		IF VARTYPE(loWord_err)="O"
			lcMessage = "No se pudo instanciar Microsoft Word ® "
			EXIT
		ENDIF
		loWord.Documents.Open(m.tcSourceFile)
		loDoc = loWord.ActiveDocument
 
		loDoc.SaveAs(m.tcTargetFile , 3)
		loDoc.Close()
		loWord.Quit()
 
		IF EMPTY(JUSTPATH(m.tcTargetFile))
			tcTargetFile = ADDBS(m.lcDocuments)+m.tcTargetFile
		ENDIF
		lResult = loFso.FileExists(FORCEEXT(m.tcTargetFile,"txt"))
 
		EXIT
	ENDDO
 
CATCH TO LOEX
	LOEX.USERVALUE = PROGRAM()
	* SHOWERROR(LOEX)  && rutina que muestra el error
 
FINALLY
 	loFso = null
	loDoc = null
	loWord = null
 
	WAIT CLEAR
	IF !EMPTY(M.LCMESSAGE)
		MESSAGEBOX(M.LCMESSAGE,0,PROGRAM())
	ENDIF
 
 
 
ENDTRY
RETURN m.lResult
ENDPROC
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

eliminar caracteres

Publicado por OMAR (1 intervención) el 01/05/2019 01:11:55
hola Fidel José, te agradezco de la gran colaboración desinteresada y por la premura, quisiera hacerte una consulta mas esta rutina que me enviaste se los puede colocar en un botón comando, ya que este proceso se se ejecutaría antes de otra sentencia que extraería parte del archivo de texto.
Nuevamente te agradezco la colaboración brindada.-
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 1.011
Oro
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

eliminar caracteres

Publicado por Fidel José (657 intervenciones) el 02/05/2019 14:56:11
Lo podés colocar en un botón, pero lo apropiado es que sea una rutina o función de acceso general que te dé la respuesta que necesitas.
El código anterior puede estar en un prg, que puede ser el mismo main.prg, o puede estar en una clase custom de una biblioteca, o en un método del mismo formulario. Esto último es conveniente cuando uno sabe que ese método no será requerido por otra parte del sistema.

Entonces en el botón tendrías algo así (suponiendo que el procedure está en un prg de funciones de usuario )
1
2
3
4
5
lcSourceFile = "c:\Temp_Recup\User\Documents\Clientes_Mis\LosPrimos\Informe de Gestión de Entregas.rtf"
lcTargetFile = "c:\Temp_Recup\User\Documents\Clientes_Mis\LosPrimos\Informe de Gestión de Entregas"
IF convert_rtf_to_text_by_MsWord(lcSourceFile , lcTargetFile)
	* Comandos a realizar con el archivo
ENDIF
Si está en un método del mismo formulario:
1
2
3
IF THISFORM.convert_rtf_to_text_by_MsWord(lcSourceFile , lcTargetFile)
	* Comandos a realizar con el archivo
ENDIF

La ventaja de esto es que el código es accesible para cualquier parte del sistema que lo necesite y la programación del botón resulta mucho más clara.
Aunque a veces programo algo en los botones, en general, prefiero crear un método en el formulario y en el click del botón coloco solamente la referencia al método que se debe atacar.

Entre los motivos graciosos para trabajar de ese modo, podemos decir que es fácil borrar un botón de un formulario sin darse cuenta, pero para quitar un método necesitas un procedimiento especial. Ahi podés perder el botón y no perdés la programación.
También está el tema de que, si necesitas hacer un cambio en la interfaz y en lugar de una extensa botonera colocas un combobox, solamente necesitarás recolocar la referencia a los métodos en lugar de escribir algo casi indescifrable.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 45
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

eliminar caracteres

Publicado por CELSO OMAR (23 intervenciones) el 04/05/2019 21:30:42
HOLA COMO ESTAS, IMPECABLE EL APORTE QUE ME DISTE FUNCIONA A LA PERFECCIÓN, DESDE YA TE RE AGRADEZCO.
CONTINUANDO UN POCO MAS CON EL CAMBIO DE FORMATO, HAY FORMA DE PASAR UN ARCHIVO .PDF A TXT? SI BIEN DESDE EL ARCHIVO .PDF ME PERMITE GUARDAR EN FORMATO TXT HASTA EL MOMENTO NO ENCUENTRO FORMAS DE CAMBIAR SU FORMATO DESDE VFP.

NUEVAMENTE TE AGRADEZCO POR TU COLABORACIÓN.-
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar