|
Recorrer campos de un registro |
Débuté par guillermo, 30 mar. 2009 16:56 - 4 réponses |
| |
| | | |
|
| |
Posté le 30 mars 2009 - 16:56 |
Hola gente
Estoy generando un proyectito para exportar a CSV los HF de un análisis. Necesito saber como recorrer los campos del registro
Algo como esto ......
For x = 1 To Cantidad_de_Campos String_a_Formar = String_a_Formar + {archivoHF}.Campo End
Gracias
Guillermo |
| |
| |
| | | |
|
| | |
| |
Posté le 30 mars 2009 - 17:17 |
-- Leer la tabla destino y dejarla limpia
HReadFirst(tabla destino) WHILE HFound() HDelete() HReadNext() END
m is currency m=1
HReadFirst(tabla origen) WHILE m<48508 tabla destino.a = tabla origen.a HReadNext(tabla origen) HAdd(tabla destino) m=m+1 END
manuel |
| |
| |
| | | |
|
| | |
| |
Posté le 30 mars 2009 - 20:18 |
gracias por la respuesta, pero evidentemente fallé en la explicacion respecto a lo que necesito ..... a ver si puedo corregir
Vamos a magnificar el escenario
Tengo 1000 tablas definidas y quiero hacer un procedimiento para volcar todas ellas a CSV
Con el Código que adjunto, paso por todas las tablas, por todos los campos de todas las tablas, solo me falta una pequeña cuestión, y es la que está comentada como /// ****** la siguiente sentencia debería poner el valor del campo de la tabla
Dado que si trabajo con "indirecciones" no me deja hacer {tabla}.{campo}
Gracias por la ayuda
Guillermo
Paso el código
nFilNum is int sStr is string sFilName is string sLFinalList is string = "" LFileList is string = HListFile() sItemList is string LTempString is string = ExtractString(LFileList,firstRank,CR) LTempItem is string WHILE LTempString <> EOT sFilName = LTempString + ".CSV" nFilNum = fCreate(sFilName) IF nFilNum = -1 THEN Error(StringBuild("Error creating file %1",sFilName),ErrorInfo()) RETURN END nFilNum = fOpen(sFilName,foWrite) IF nFilNum = -1 THEN // Error opening file Error(StringBuild("Error opening %1",sFilName),ErrorInfo()) ELSE sItemList = HListItem({LTempString}) FOR ALL {LTempString} sStr = "" LTempItem = ExtractString(sItemList,firstRank,CR) WHILE LTempItem <> EOT /// ****** la siguiente sentencia debería poner el valor del campo de la tabla sStr = sStr + LTempItem + separador LTempItem = ExtractString(sItemList,nextRank,CR) END fWrite(nFilNum,sStr) IF ErrorOccurred THEN Error(StringBuild("Error writing in %1",sFilName),ErrorInfo()) END END fClose(nFilNum) END LTempString = ExtractString(LFileList, nextRank,CR) END |
| |
| |
| | | |
|
| | |
| |
Posté le 31 mars 2009 - 11:41 |
prueba con:
var1="TABLA.CAMPO" var2={var1,inditem}
o
var2={"TABLA.CAMPO",inditem}
Saludos
"guillermo" <glsaavedra@adinet.com.uy> escribió en el mensaje news:1e8195324991fcc8951afe990467268e@news.pcsoft...
gracias por la respuesta, pero evidentemente fallé en la explicacion respecto a lo que necesito ..... a ver si puedo corregir
Vamos a magnificar el escenario
Tengo 1000 tablas definidas y quiero hacer un procedimiento para volcar todas ellas a CSV
Con el Código que adjunto, paso por todas las tablas, por todos los campos de todas las tablas, solo me falta una pequeña cuestión, y es la que está comentada como /// ****** la siguiente sentencia debería poner el valor del campo de la tabla
Dado que si trabajo con "indirecciones" no me deja hacer {tabla}.{campo}
Gracias por la ayuda
Guillermo
Paso el código
nFilNum is int sStr is string sFilName is string sLFinalList is string = "" LFileList is string = HListFile() sItemList is string LTempString is string = ExtractString(LFileList,firstRank,CR) LTempItem is string WHILE LTempString <> EOT sFilName = LTempString + ".CSV" nFilNum = fCreate(sFilName) IF nFilNum = -1 THEN Error(StringBuild("Error creating file %1",sFilName),ErrorInfo()) RETURN END nFilNum = fOpen(sFilName,foWrite) IF nFilNum = -1 THEN // Error opening file Error(StringBuild("Error opening %1",sFilName),ErrorInfo()) ELSE sItemList = HListItem({LTempString}) FOR ALL {LTempString} sStr = "" LTempItem = ExtractString(sItemList,firstRank,CR) WHILE LTempItem <> EOT /// ****** la siguiente sentencia debería poner el valor del campo de la tabla sStr = sStr + LTempItem + separador LTempItem = ExtractString(sItemList,nextRank,CR) END fWrite(nFilNum,sStr) IF ErrorOccurred THEN Error(StringBuild("Error writing in %1",sFilName),ErrorInfo()) END END fClose(nFilNum) END LTempString = ExtractString(LFileList, nextRank,CR) END
|
| |
| |
| | | |
|
| | |
| |
Posté le 01 avril 2009 - 11:04 |
La indirección, utilizandola correctamente es una herramienta muy potente, en tu caso y tal como lo planteas, no estas solucionando bien. prueba lo siguiente:
s is string s="tabla.campo" {s,indItem}=asignacion
espero que te sirva.
Saludos |
| |
| |
| | | |
|
| | | | |
| | |
|