Página 1 de 1

Reorganizar um TXT

Enviado: 01 Jul 2011 14:17
por marcos.gurupi
Caros, eu tenho o arq. texto criado pela framework da daruma como o modelo abaixo:

Código: Selecionar todos

|C400|2D|FS700M|DR0609BR000000192780|000|                                                                                                  |C405|02052011|003|000248|000993|9638401,00|16000,00|                                                                                |C405|03052011|003|000249|000997|9651401,00|13000,00|                                                                                |C405|04052011|003|000250|001003|9795401,00|144000,00|                                                                              |C405|05052011|003|000251|001007|9809401,00|14000,00|                                                                                |C405|13052011|003|000257|001027|9839401,00|30000,00|                                                                                |C405|16052011|003|000258|001031|9850901,00|11500,00|                                                                                |C405|19052011|003|000260|001041|9860501,00|9600,00|                                                                                  |C405|20052011|003|000261|001046|9893701,00|33200,00|                                                                                |C405|30052011|003|000267|001065|9909701,00|16000,00|                                                                                |C420|02T1200|8000,00|02||                                                                                                                               |C420|02T1200|13000,00|02||                                                                                                                             |C420|02T1200|6500,00|02||                                                                                                                               |C420|02T1200|2500,00|02||                                                                                                                               |C420|02T1200|25000,00|02||                                                                                                                             |C420|02T1200|55000,00|02||                                                                                                                             |C420|02T1200|55000,00|02||                                                                                                                             |C420|02T1200|14000,00|02||                                                                                                                             |C420|02T1200|6000,00|02||                                                                                                                               |C420|02T1200|11500,00|02||                                                                                                                             |C420|02T1200|3000,00|02||                                                                                                                               |C420|02T1200|6600,00|02||                                                                                                                               |C420|02T1200|25200,00|02||                                                                                                                             |C420|02T1200|4000,00|02||                                                                                                                               |C425|00003|2000,000|un|8000,00|0,00|0,00|                                                                                                    |C425|000075|1000,000|un|13000,00|0,00|0,00|                                                                                                 |C425|000023|1000,000|un|6500,00|0,00|0,00|                                                                                                   |C425|000020|1000,000|un|2500,00|0,00|0,00|                                                                                                   |C425|000054|1000,000|un|25000,00|0,00|0,00|                                                                                                 |C425|000053|1000,000|un|55000,00|0,00|0,00|                                                                                                 |C425|000076|1000,000|un|55000,00|0,00|0,00|                                                                                                 |C425|000016|1000,000|un|14000,00|0,00|0,00|                                                                                                 |C425|00003|5000,000|un|6000,00|0,00|0,00|                                                                                                    |C425|000041|1000,000|un|11500,00|0,00|0,00|                                                                                                 |C425|000020|1000,000|un|3000,00|0,00|0,00|                                                                                                   |C425|000023|1000,000|un|6600,00|0,00|0,00|                                                                                                   |C425|000015|1000,000|un|25200,00|0,00|0,00|                                                                                                 |C425|000044|2000,000|un|4000,00|0,00|0,00|                                                                                                   |C490|000|5102|012,00|358400000,00|358400000,00|358400000,00|2D|                                                              |C490|000|5102|012,00|145600000,00|145600000,00|145600000,00|2D|                                                              |C490|000|5102|012,00|72800000,00|72800000,00|72800000,00|2D|                                                                   |C490|000|5102|012,00|28000000,00|28000000,00|28000000,00|2D|                                                                   |C490|000|5102|012,00|280000000,00|280000000,00|280000000,00|2D|                                                              |C490|000|5102|012,00|616000000,00|616000000,00|616000000,00|2D|                                                              |C490|000|5102|012,00|616000000,00|616000000,00|616000000,00|2D|                                                              |C490|000|5102|012,00|156800000,00|156800000,00|156800000,00|2D|                                                              |C490|000|5102|012,00|1680000000,00|1680000000,00|1680000000,00|2D|                                                        |C490|000|5102|012,00|128800000,00|128800000,00|128800000,00|2D|                                                              |C490|000|5102|012,00|33600000,00|33600000,00|33600000,00|2D|                                                                   |C490|000|5102|012,00|73920000,00|73920000,00|73920000,00|2D|                                                                   |C490|000|5102|012,00|282240000,00|282240000,00|282240000,00|2D|                                                              |C490|000|5102|012,00|179200000,00|179200000,00|179200000,00|2D|                                                              
Aqui eu tenho o BLOCO C onde tem seus respectivos registro, acontece que o framework cria neste formato acima onde deveria ser organizado por registros pai e filho, ou seja, eu teria o C420 e o seus C425 e ai por diante. Minha pergunte eh como eu consegueria depois de pegar esse arq. organizar os registros?

Eh q pelo q estive olhando talvez fique mais facil eu pegar as informacoes da minha tabela e criar esses registro ao inves de aproveitar o q foi criado pelo framework.

Marcos Roberto.

Reorganizar um TXT

Enviado: 01 Jul 2011 16:25
por sambomb
Tente isso...

Obs.: Não testei, mas acredito que de para você tirar um exemplo

Código: Selecionar todos

Function LerArqDaruma( cCaminho )
Local cTexto := "", aLinhas := {},  i := 1, aTextoQuebrado := {}

   cTexto := MemoRead(cCaminho)

   While AtInRules( "  ", cTexto)
      cTexto := StrTran(cTexto,"  "," ")       
   end

   aTextoQuebrado := Explode(cTexto," ",.T.)

   For i := 1 to Len(aTextoQuebrado)

      aAdd(aLinhas,Explode(AllTrim(aTextoQuebrado[i]),"|",.T.))

   end

Return aLinhas

****************************************************************************
function Explode(cString, cSeparador, lAllTrim)
****************************************************************************
*
* Quebrar uma string nos separadores gerando uma matriz
* Parametros: cString
* Retorno: aArray
*
* Autor: Samir
* 27/10/2010 - 16:51:53
*
****************************************************************************

local aArray := {}, nLast := 1, nAt := 0, cInfo := ""


   Default cSeparador := ",", lAllTrim := .F.

   If lAllTrim

      cString := AllTrim( cString )

   end

   nAT := At(cSeparador,cString)

   If Empty(cString)

      Msg("cString = nul")

      Return aArray

   ElseIf nAt = 0

      aAdd(aArray,cString)

      Return aArray

   end

   While nAt > 0

      cInfo := ""

      if nAt = 1

         cString  := SubStr(cString,nAt+1)

         nAt      := AtInRules(cSeparador,cString,nLast)

         Loop

      end

      cInfo    := SubStr(cString,1,nAt-1)

      If lAllTrim

         cInfo := AllTrim( cInfo )

      end

      cString  := SubStr(cString,nAt+1)

      If lAllTrim

         cString := AllTrim( cString )

      end

      nAt      := AtInRules(cSeparador,cString,nLast)

      If !Empty(cInfo)

         aAdd(aArray,cInfo)

      end

   end

   If lAllTrim

      cString := AllTrim( cString )

   end

   If !Empty(cString)

      aAdd(aArray,cString)

   end

Return aArray

/*------------------------------------------------------------------------*/

****************************************************************************
FUNCTION AtInRules( cFind, sLine, nStart )
****************************************************************************
*
* Copiado do codigo fonte do xHarbour
*
****************************************************************************

   LOCAL nAt, nLen := Len( sLine ), cChar

   IF nStart == NIL
      nStart := 1
   ENDIF

   FOR nAt := nStart TO nLen
      cChar := SubStr( sLine, nAt, 1 )

      IF cChar $ '"'+"'"
         DO WHILE ( nAt < nLen ) .AND. SubStr( sLine, ++nAt, 1 ) != cChar
         ENDDO
      ELSEIF cChar == '\'
         // Skip next [Escaped] char
         nAt++
      ELSEIF cChar == cFind
         IF cFind == "<" .AND. SubStr( sLine, nAt + 1, 1 ) $ "=>"
            // Clipper sees it as a double char token "<=" or "<>" and does not accept it!
         ELSE
            RETURN nAt
         ENDIF
      ENDIF
   NEXT

RETURN 0

/*------------------------------------------------------------------------*/


Reorganizar um TXT

Enviado: 02 Jul 2011 02:13
por rochinha
Amiguinho,

Resolvi parte de meu problemas com registros no SINTEGRA indexando o conteudo do registro 54 usando o trecho abaixo:

Código: Selecionar todos

   local aSintegra54 := ASORT( aSintegraRegistro54,,,{|x,y|val(substr(x,35,3))<val(substr(y,35,3))} )
   local nSintegra54 := fCreate( "SINTEG54.TXT" )
   FOR I = 1 TO LEN(aSintegra54)
       fWrite( nSintegra54, aSintegra54[I], LEN(aSintegra54[I]) )
   NEXT
   fClose( nSintegra54 )
Cada registro 54 capturado era acrescentado no vetor aSintegraRegistro54

Eu então ordenava o conteúdo pelo trecho compreendido em 35 e 37, {|x,y|val(substr(x,35,3))<val(substr(y,35,3))}, usando a função ASORT()

Depois re-escrevia o TXT com o conteúdo organizado.

Reorganizar um TXT

Enviado: 04 Jul 2011 11:06
por marcos.gurupi
Caros, obrigado pelos exemplos, mas nao deu certo. Acredito que nao seja possivel fazer o q deveria ser feito, pois como a rotina saberia qual registro filho pertece ao registro pai? O arq. q enviei eh um arq. pequeno com poucos lancamentos mas quando for um com 4 mil linhas por exemplo. Essa bucha eu vou passar para a DARUMA. Mas serah q soh eu estou pegando o arq. da daruma para preencher o sped?

Marcos Roberto.