Advertisement
Guest User

Funciones para copia de registros de y desde string

a guest
Mar 23rd, 2016
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. * Genera un cursor a partir de un string de definicion + datos tipo:
  2. *   Codigo I |Nombre C(15) |Direccion C(15)|Datos1 C(15) |Datos2 C(15) |Datos3 C(15) |Nrocui  I
  3. *   1        |JUAN PEREZ   |DIRECCION      |.NULL.       |.NULL.       |.NULL.       | 201130
  4. *   7        |MARIO LOPEZ  |.NULL.         |.NULL.       |OTRO DATO    |.NULL.       | 123456
  5. FUNCTION StrToDBF(sAlias, sDatos)
  6.  
  7. LOCAL sFields, sTmp, axFld[1], nFld, sFld, sType
  8.  
  9. SET MEMOWIDTH TO 1024
  10. sFields = STRTRAN(MLINE(sDatos, 1), "|", " NULL ,")
  11. sTmp = ADDBS(SYS(2023)) + "app.tmp"
  12. STRTOFILE(sDatos, sTmp)
  13.  
  14. CREATE CURSOR (sAlias) ( &sFields )
  15. APPEND FROM (sTmp) DELIMITED WITH CHARACTER "|"
  16. DELETE RECORD 1     && Titulos
  17.  
  18. FOR nFld = 1 TO AFIELDS(axFld)
  19.     sFld  = axFld[nFld, 1]
  20.     sType = axFld[nFld, 2]
  21.     IF sType=="C"
  22.         REPLACE (sFld) WITH .NULL. FOR &sFld =".NULL."
  23.     ENDIF
  24. NEXT
  25.  
  26. GO TOP
  27.  
  28. RETURN
  29.  
  30.  
  31.  
  32. #define CRLF CHR(13)+CHR(10)
  33. #define SEP  " |"
  34.  
  35. * Vuelca una tabla a un string separandola con | , ej:
  36. *   CODIGO |NOMBRE      |DIRECCION    |DATOS1   |DATOS2    |DATOS3    |NROCUI |
  37. *   6      |MARIO LOPEZ |DIRECCION #2 |.NULL.   |OTRO DATO |.NULL.    |123456 |
  38. *   3      |JUAN PEREZ  |DIRECCION    |CORRECTO |DATOS     |OTRO DATO |201130 |
  39.  
  40. FUNCTION DBFToStr(sAlias)
  41.  
  42. LOCAL axFld[1], nFlds, nFld, sFld, sType, anLen[1], nLen, sStr
  43.  
  44. sAlias = EVL(sAlias, ALIAS())
  45. sStr = ""
  46.  
  47. nFlds = AFIELDS(axFld, sAlias)
  48. FOR nFld = 1 TO nFlds
  49.     sFld  = axFld[nFld, 1]
  50.     sType = axFld[nFld, 2]
  51.     nLen  = axFld[nFld, 3]
  52.     IF sType=="C"       && Autoajusto columna
  53.         SELECT MAX(LEN(ALLTRIM(&sFld ))) FROM (sAlias) INTO ARRAY anLen
  54.         nLen = anLen[1]
  55.     ENDIF
  56.     nLen = MAX(nLen, LEN(sFld))
  57.     axFld[nFld, 3] = nLen
  58.  
  59.     sStr = sStr + PADR(sFld, nLen) + SEP
  60. NEXT
  61.  
  62. SCAN
  63.     sStr = sStr + CRLF
  64.     FOR nFld = 1 TO nFlds
  65.         sFld  = axFld[nFld, 1]
  66.         nLen  = axFld[nFld, 3]
  67.         sStr = sStr + PADR(TRANSFORM(EVALUATE(sFld)), nLen) + SEP
  68.     NEXT
  69. ENDSCAN
  70.  
  71. RETURN sS
  72. *   Codigo I |Nombre C(15) |Direccion C(15)|Datos1 C(15) |Datos2 C(15) |Datos3 C(15) |Nrocui  I
  73. *   1        |JUAN PEREZ   |DIRECCION      |.NULL.       |.NULL.       |.NULL.       | 201130
  74. *   7        |MARIO LOPEZ  |.NULL.         |.NULL.       |OTRO DATO    |.NULL.       | 123456
  75. FUNCTION StrToDBF(sAlias, sDatos)
  76.  
  77. LOCAL sFields, sTmp, axFld[1], nFld, sFld, sType
  78.  
  79. SET MEMOWIDTH TO 1024
  80. sFields = STRTRAN(MLINE(sDatos, 1), "|", " NULL ,")
  81. sTmp = ADDBS(SYS(2023)) + "app.tmp"
  82. STRTOFILE(sDatos, sTmp)
  83.  
  84. CREATE CURSOR (sAlias) ( &sFields )
  85. APPEND FROM (sTmp) DELIMITED WITH CHARACTER "|"
  86. DELETE RECORD 1     && Titulos
  87.  
  88. FOR nFld = 1 TO AFIELDS(axFld)
  89.     sFld  = axFld[nFld, 1]
  90.     sType = axFld[nFld, 2]
  91.     IF sType=="C"
  92.         REPLACE (sFld) WITH .NULL. FOR &sFld =".NULL."
  93.     ENDIF
  94. NEXT
  95.  
  96. GO TOP
  97.  
  98. RETURN
  99.  
  100.  
  101.  
  102. #define CRLF CHR(13)+CHR(10)
  103. #define SEP  " |"
  104.  
  105. * Vuelca una tabla a un string separandola con | , ej:
  106. *   CODIGO |NOMBRE      |DIRECCION    |DATOS1   |DATOS2    |DATOS3    |NROCUI |
  107. *   6      |MARIO LOPEZ |DIRECCION #2 |.NULL.   |OTRO DATO |.NULL.    |123456 |
  108. *   3      |JUAN PEREZ  |DIRECCION    |CORRECTO |DATOS     |OTRO DATO |201130 |
  109.  
  110. FUNCTION DBFToStr(sAlias)
  111.  
  112. LOCAL axFld[1], nFlds, nFld, sFld, sType, anLen[1], nLen, sStr
  113.  
  114. sAlias = EVL(sAlias, ALIAS())
  115. sStr = ""
  116.  
  117. nFlds = AFIELDS(axFld, sAlias)
  118. FOR nFld = 1 TO nFlds
  119.     sFld  = axFld[nFld, 1]
  120.     sType = axFld[nFld, 2]
  121.     nLen  = axFld[nFld, 3]
  122.     IF sType=="C"       && Autoajusto columna
  123.         SELECT MAX(LEN(ALLTRIM(&sFld ))) FROM (sAlias) INTO ARRAY anLen
  124.         nLen = anLen[1]
  125.     ENDIF
  126.     nLen = MAX(nLen, LEN(sFld))
  127.     axFld[nFld, 3] = nLen
  128.  
  129.     sStr = sStr + PADR(sFld, nLen) + SEP
  130. NEXT
  131.  
  132. SCAN
  133.     sStr = sStr + CRLF
  134.     FOR nFld = 1 TO nFlds
  135.         sFld  = axFld[nFld, 1]
  136.         nLen  = axFld[nFld, 3]
  137.         sStr = sStr + PADR(TRANSFORM(EVALUATE(sFld)), nLen) + SEP
  138.     NEXT
  139. ENDSCAN
  140.  
  141. RETURN sS
  142. *   1        |JUAN PEREZ   |DIRECCION      |.NULL.       |.NULL.       |.NULL.       | 201130
  143. *   7        |MARIO LOPEZ  |.NULL.         |.NULL.       |OTRO DATO    |.NULL.       | 123456
  144. FUNCTION StrToDBF(sAlias, sDatos)
  145.  
  146. LOCAL sFields, sTmp, axFld[1], nFld, sFld, sType
  147.  
  148. SET MEMOWIDTH TO 1024
  149. sFields = STRTRAN(MLINE(sDatos, 1), "|", " NULL ,")
  150. sTmp = ADDBS(SYS(2023)) + "app.tmp"
  151. STRTOFILE(sDatos, sTmp)
  152.  
  153. CREATE CURSOR (sAlias) ( &sFields )
  154. APPEND FROM (sTmp) DELIMITED WITH CHARACTER "|"
  155. DELETE RECORD 1     && Titulos
  156.  
  157. FOR nFld = 1 TO AFIELDS(axFld)
  158.     sFld  = axFld[nFld, 1]
  159.     sType = axFld[nFld, 2]
  160.     IF sType=="C"
  161.         REPLACE (sFld) WITH .NULL. FOR &sFld =".NULL."
  162.     ENDIF
  163. NEXT
  164.  
  165. GO TOP
  166.  
  167. RETURN
  168.  
  169.  
  170.  
  171. #define CRLF CHR(13)+CHR(10)
  172. #define SEP  " |"
  173.  
  174. * Vuelca una tabla a un string separandola con | , ej:
  175. *   CODIGO |NOMBRE      |DIRECCION    |DATOS1   |DATOS2    |DATOS3    |NROCUI |
  176. *   6      |MARIO LOPEZ |DIRECCION #2 |.NULL.   |OTRO DATO |.NULL.    |123456 |
  177. *   3      |JUAN PEREZ  |DIRECCION    |CORRECTO |DATOS     |OTRO DATO |201130 |
  178.  
  179. FUNCTION DBFToStr(sAlias)
  180.  
  181. LOCAL axFld[1], nFlds, nFld, sFld, sType, anLen[1], nLen, sStr
  182.  
  183. sAlias = EVL(sAlias, ALIAS())
  184. sStr = ""
  185.  
  186. nFlds = AFIELDS(axFld, sAlias)
  187. FOR nFld = 1 TO nFlds
  188.     sFld  = axFld[nFld, 1]
  189.     sType = axFld[nFld, 2]
  190.     nLen  = axFld[nFld, 3]
  191.     IF sType=="C"       && Autoajusto columna
  192.         SELECT MAX(LEN(ALLTRIM(&sFld ))) FROM (sAlias) INTO ARRAY anLen
  193.         nLen = anLen[1]
  194.     ENDIF
  195.     nLen = MAX(nLen, LEN(sFld))
  196.     axFld[nFld, 3] = nLen
  197.  
  198.     sStr = sStr + PADR(sFld, nLen) + SEP
  199. NEXT
  200.  
  201. SCAN
  202.     sStr = sStr + CRLF
  203.     FOR nFld = 1 TO nFlds
  204.         sFld  = axFld[nFld, 1]
  205.         nLen  = axFld[nFld, 3]
  206.         sStr = sStr + PADR(TRANSFORM(EVALUATE(sFld)), nLen) + SEP
  207.     NEXT
  208. ENDSCAN
  209.  
  210. RETURN sS
  211. *   7        |MARIO LOPEZ  |.NULL.         |.NULL.       |OTRO DATO    |.NULL.       | 123456
  212. FUNCTION StrToDBF(sAlias, sDatos)
  213.  
  214. LOCAL sFields, sTmp, axFld[1], nFld, sFld, sType
  215.  
  216. SET MEMOWIDTH TO 1024
  217. sFields = STRTRAN(MLINE(sDatos, 1), "|", " NULL ,")
  218. sTmp = ADDBS(SYS(2023)) + "app.tmp"
  219. STRTOFILE(sDatos, sTmp)
  220.  
  221. CREATE CURSOR (sAlias) ( &sFields )
  222. APPEND FROM (sTmp) DELIMITED WITH CHARACTER "|"
  223. DELETE RECORD 1     && Titulos
  224.  
  225. FOR nFld = 1 TO AFIELDS(axFld)
  226.     sFld  = axFld[nFld, 1]
  227.     sType = axFld[nFld, 2]
  228.     IF sType=="C"
  229.         REPLACE (sFld) WITH .NULL. FOR &sFld =".NULL."
  230.     ENDIF
  231. NEXT
  232.  
  233. GO TOP
  234.  
  235. RETURN
  236.  
  237.  
  238.  
  239. #define CRLF CHR(13)+CHR(10)
  240. #define SEP  " |"
  241. * Vuelca una tabla a un string separandola con | , ej:
  242. *   CODIGO |NOMBRE      |DIRECCION    |DATOS1   |DATOS2    |DATOS3    |NROCUI |
  243. *   6      |MARIO LOPEZ |DIRECCION #2 |.NULL.   |OTRO DATO |.NULL.    |123456 |
  244. *   3      |JUAN PEREZ  |DIRECCION    |CORRECTO |DATOS     |OTRO DATO |201130 |
  245.  
  246. FUNCTION DBFToStr(sAlias)
  247.  
  248. LOCAL axFld[1], nFlds, nFld, sFld, sType, anLen[1], nLen, sStr
  249.  
  250. sAlias = EVL(sAlias, ALIAS())
  251. sStr = ""
  252.  
  253. nFlds = AFIELDS(axFld, sAlias)
  254. FOR nFld = 1 TO nFlds
  255.     sFld  = axFld[nFld, 1]
  256.     sType = axFld[nFld, 2]
  257.     nLen  = axFld[nFld, 3]
  258.     IF sType=="C"       && Autoajusto columna
  259.         SELECT MAX(LEN(ALLTRIM(&sFld ))) FROM (sAlias) INTO ARRAY anLen
  260.         nLen = anLen[1]
  261.     ENDIF
  262.     nLen = MAX(nLen, LEN(sFld))
  263.     axFld[nFld, 3] = nLen
  264.  
  265.     sStr = sStr + PADR(sFld, nLen) + SEP
  266. NEXT
  267.  
  268. SCAN
  269.     sStr = sStr + CRLF
  270.     FOR nFld = 1 TO nFlds
  271.         sFld  = axFld[nFld, 1]
  272.         nLen  = axFld[nFld, 3]
  273.         sStr = sStr + PADR(TRANSFORM(EVALUATE(sFld)), nLen) + SEP
  274.     NEXT
  275. ENDSCAN
  276.  
  277. RETURN sS
  278. * Vuelca una tabla a un string separandola con | , ej:
  279. *   CODIGO |NOMBRE      |DIRECCION    |DATOS1   |DATOS2    |DATOS3    |NROCUI |
  280. *   6      |MARIO LOPEZ |DIRECCION #2 |.NULL.   |OTRO DATO |.NULL.    |123456 |
  281. *   3      |JUAN PEREZ  |DIRECCION    |CORRECTO |DATOS     |OTRO DATO |201130 |
  282.  
  283. FUNCTION DBFToStr(sAlias)
  284.  
  285. LOCAL axFld[1], nFlds, nFld, sFld, sType, anLen[1], nLen, sStr
  286.  
  287. sAlias = EVL(sAlias, ALIAS())
  288. sStr = ""
  289.  
  290. nFlds = AFIELDS(axFld, sAlias)
  291. FOR nFld = 1 TO nFlds
  292.     sFld  = axFld[nFld, 1]
  293.     sType = axFld[nFld, 2]
  294.     nLen  = axFld[nFld, 3]
  295.     IF sType=="C"       && Autoajusto columna
  296.         SELECT MAX(LEN(ALLTRIM(&sFld ))) FROM (sAlias) INTO ARRAY anLen
  297.         nLen = anLen[1]
  298.     ENDIF
  299.     nLen = MAX(nLen, LEN(sFld))
  300.     axFld[nFld, 3] = nLen
  301.  
  302.     sStr = sStr + PADR(sFld, nLen) + SEP
  303. NEXT
  304.  
  305. SCAN
  306.     sStr = sStr + CRLF
  307.     FOR nFld = 1 TO nFlds
  308.         sFld  = axFld[nFld, 1]
  309.         nLen  = axFld[nFld, 3]
  310.         sStr = sStr + PADR(TRANSFORM(EVALUATE(sFld)), nLen) + SEP
  311.     NEXT
  312. ENDSCAN
  313.  
  314. RETURN sS
  315. *   CODIGO |NOMBRE      |DIRECCION    |DATOS1   |DATOS2    |DATOS3    |NROCUI |
  316. *   6      |MARIO LOPEZ |DIRECCION #2 |.NULL.   |OTRO DATO |.NULL.    |123456 |
  317. *   3      |JUAN PEREZ  |DIRECCION    |CORRECTO |DATOS     |OTRO DATO |201130 |
  318.  
  319. FUNCTION DBFToStr(sAlias)
  320.  
  321. LOCAL axFld[1], nFlds, nFld, sFld, sType, anLen[1], nLen, sStr
  322.  
  323. sAlias = EVL(sAlias, ALIAS())
  324. sStr = ""
  325.  
  326. nFlds = AFIELDS(axFld, sAlias)
  327. FOR nFld = 1 TO nFlds
  328.     sFld  = axFld[nFld, 1]
  329.     sType = axFld[nFld, 2]
  330.     nLen  = axFld[nFld, 3]
  331.     IF sType=="C"       && Autoajusto columna
  332.         SELECT MAX(LEN(ALLTRIM(&sFld ))) FROM (sAlias) INTO ARRAY anLen
  333.         nLen = anLen[1]
  334.     ENDIF
  335.     nLen = MAX(nLen, LEN(sFld))
  336.     axFld[nFld, 3] = nLen
  337.  
  338.     sStr = sStr + PADR(sFld, nLen) + SEP
  339. NEXT
  340.  
  341. SCAN
  342.     sStr = sStr + CRLF
  343.     FOR nFld = 1 TO nFlds
  344.         sFld  = axFld[nFld, 1]
  345.         nLen  = axFld[nFld, 3]
  346.         sStr = sStr + PADR(TRANSFORM(EVALUATE(sFld)), nLen) + SEP
  347.     NEXT
  348. ENDSCAN
  349.  
  350. RETURN sS
  351. *   6      |MARIO LOPEZ |DIRECCION #2 |.NULL.   |OTRO DATO |.NULL.    |123456 |
  352. *   3      |JUAN PEREZ  |DIRECCION    |CORRECTO |DATOS     |OTRO DATO |201130 |
  353.  
  354. FUNCTION DBFToStr(sAlias)
  355.  
  356. LOCAL axFld[1], nFlds, nFld, sFld, sType, anLen[1], nLen, sStr
  357.  
  358. sAlias = EVL(sAlias, ALIAS())
  359. sStr = ""
  360.  
  361. nFlds = AFIELDS(axFld, sAlias)
  362. FOR nFld = 1 TO nFlds
  363.     sFld  = axFld[nFld, 1]
  364.     sType = axFld[nFld, 2]
  365.     nLen  = axFld[nFld, 3]
  366.     IF sType=="C"       && Autoajusto columna
  367.         SELECT MAX(LEN(ALLTRIM(&sFld ))) FROM (sAlias) INTO ARRAY anLen
  368.         nLen = anLen[1]
  369.     ENDIF
  370.     nLen = MAX(nLen, LEN(sFld))
  371.     axFld[nFld, 3] = nLen
  372.  
  373.     sStr = sStr + PADR(sFld, nLen) + SEP
  374. NEXT
  375.  
  376. SCAN
  377.     sStr = sStr + CRLF
  378.     FOR nFld = 1 TO nFlds
  379.         sFld  = axFld[nFld, 1]
  380.         nLen  = axFld[nFld, 3]
  381.         sStr = sStr + PADR(TRANSFORM(EVALUATE(sFld)), nLen) + SEP
  382.     NEXT
  383. ENDSCAN
  384.  
  385. RETURN sS
  386. *   3      |JUAN PEREZ  |DIRECCION    |CORRECTO |DATOS     |OTRO DATO |201130 |
  387.  
  388. FUNCTION DBFToStr(sAlias)
  389.  
  390. LOCAL axFld[1], nFlds, nFld, sFld, sType, anLen[1], nLen, sStr
  391.  
  392. sAlias = EVL(sAlias, ALIAS())
  393. sStr = ""
  394.  
  395. nFlds = AFIELDS(axFld, sAlias)
  396. FOR nFld = 1 TO nFlds
  397.     sFld  = axFld[nFld, 1]
  398.     sType = axFld[nFld, 2]
  399.     nLen  = axFld[nFld, 3]
  400.     IF sType=="C"       && Autoajusto columna
  401.         SELECT MAX(LEN(ALLTRIM(&sFld ))) FROM (sAlias) INTO ARRAY anLen
  402.         nLen = anLen[1]
  403.     ENDIF
  404.     nLen = MAX(nLen, LEN(sFld))
  405.     axFld[nFld, 3] = nLen
  406.  
  407.     sStr = sStr + PADR(sFld, nLen) + SEP
  408. NEXT
  409.  
  410. SCAN
  411.     sStr = sStr + CRLF
  412.     FOR nFld = 1 TO nFlds
  413.         sFld  = axFld[nFld, 1]
  414.         nLen  = axFld[nFld, 3]
  415.         sStr = sStr + PADR(TRANSFORM(EVALUATE(sFld)), nLen) + SEP
  416.     NEXT
  417. ENDSCAN
  418.  
  419. RETURN sStr
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement