FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin for Harbour/xHarbour Problem reading text file
Posts: 708
Joined: Fri Oct 28, 2005 09:53 AM
Problem reading text file
Posted: Thu Oct 12, 2006 02:54 PM

I am having a problem when reading text from a file. The file is large 1.5MB to 4MB (200,000 lines or more). Usuaally around 100,000 lines the program exits prematurely with no errors. I would appreciate any help. Here is the code for reading file.

         DO WHILE ! lEof

            // Init...
            cLine   := ""

            // Read...
            Ureadln( hCTS, @cLine, 1, @lEof )

            // Criteria...
            IF EMPTY( cLine )
               LOOP
            ENDIF
            nLine++

            // Log...
            cDat := cCTS + " EOF = " + IF(lEof,"YES","NO") + " = " + LTRIM(TRANSF(nLine,"999,999")) + cEol
            FWRITE( hLog, cDat )

            // Tag...
            cTag   := UPPER( LEFT( cLine, AT("*",cLine)-1 ) )
            cValue := UPPER( SUBSTR( cLine, AT("*",cLine)+1 ) )

            DO CASE
               CASE ( cTag == "OVERSEAS" )
                    cOverseas := cValue
               CASE ( cTag == "USA"      )
                    cUsa      := cValue
               CASE ( cTag == "PROFILE"  )
                    cProfile  := cValue

               CASE ( cTag == "SHIPNAME" )
                    cShipname := cValue
               CASE ( cTag == "SHIPADD1" )
                    cShipadd1 := cValue
               CASE ( cTag == "SHIPADD2" )
                    cShipadd2 := cValue
               CASE ( cTag == "SHIPADD3" )
                    cShipadd3 := cValue
               CASE ( cTag == "SHIPADD4" )
                    cShipadd4 := cValue

               CASE ( cTag == "SVC"      )
                    cSvc      := cValue
               CASE ( cTag == "REF"      )
                    cRef      := cValue
               CASE ( cTag == "MBL"      )
                    cMbl      := cValue
               CASE ( cTag == "HBL"      )
                    cHbl      := cValue
               CASE ( cTag == "BKG"      )
                    cBkg      := cValue

               CASE ( cTag == "CONSNAME" )
                    cConsname := cValue
               CASE ( cTag == "CONSADD1" )
                    cConsadd1 := cValue
               CASE ( cTag == "CONSADD2" )
                    cConsadd2 := cValue
               CASE ( cTag == "CONSADD3" )
                    cConsadd3 := cValue
               CASE ( cTag == "CONSADD4" )
                    cConsadd4 := cValue

               CASE ( cTag == "NOTINAME" )
                    cNotiname := cValue
               CASE ( cTag == "NOTIADD1" )
                    cNotiadd1 := cValue
               CASE ( cTag == "NOTIADD2" )
                    cNotiadd2 := cValue
               CASE ( cTag == "NOTIADD3" )
                    cNotiadd3 := cValue
               CASE ( cTag == "NOTIADD4" )
                    cNotiadd4 := cValue

               CASE ( cTag =  "RCPTCD"   )
                    cRcptcd   := cValue
               CASE ( cTag == "RCPT"     )
                    cRcpt     := cValue
               CASE ( cTag == "POLCD"    )
                    cPolcd    := cValue
               CASE ( cTag == "POL"      )
                    cPol      := cValue
               CASE ( cTag == "POULCD"   )
                    cPoulcd   := cValue
               CASE ( cTag == "POUL"     )
                    cPoul     := cValue
               CASE ( cTag == "DSTCD"    )
                    cDstcd    := cValue
               CASE ( cTag == "DEST"     )
                    cDest     := cValue
               CASE ( cTag == "CARRIER"  )
                    cCarrier  := cValue
               CASE ( cTag == "VESSEL"   )
                    cVessel   := cValue
               CASE ( cTag == "VOY"      )
                    cVoy      := cValue
               CASE ( cTag == "COMM"     )
                    cComm     := cValue
               CASE ( cTag == "PCS"      )
                    cPcs      := cValue
               CASE ( cTag == "PKG"      )
                    cPkg      := cValue
               CASE ( cTag == "KGS"      )
                    cKgs      := cValue
               CASE ( cTag == "CBM"      )
                    cCbm      := cValue
               CASE ( cTag == "ETD"      )
                    cEtd      := cValue
               CASE ( cTag == "ETA"      )
                    cEta      := cValue
               CASE ( cTag == "WK"       )
                    cWk       := cValue

               CASE ( cTag == "SONO"     )
                    cSoNo     := cValue
               CASE ( cTag == "OBL"      )
                    cObtype   := cValue
               CASE ( cTag == "DOOR"     )
                    cDoor     := cValue
               CASE ( cTag == "BLFORM"   )
                    cBlform   := cValue

               CASE ( cTag == "SALES"    )
                    cSales    := cValue
               CASE ( cTag == "DOCDATE"  )
                    cDocdate  := cValue

               CASE ( cTag == "CTNR"     )
                    nCtnr++
                    aCtnr[nCtnr] := cValue

               CASE ( cTag == "PONO"     )
                    nPo++
                    aPo[nPo] := cValue

               CASE ( cTag == "END"      )
                    lStart := .T.
            ENDCASE

            // Update...
            IF lStart

               // Init...
               lProcess := .T.
               lEmail   := .F.
               lDest    := .F.
               cUsa1    := ""
               lObl     := .F.
               cObl1    := ""
               cTo      := ""
               cCClist  := ""
               cSubject := "Apex_CTS_destination_station_change"

               cSay := "Uploading RCA " + cOverseas + " - " + cHbl + " . . ."
               oSay:Refresh()
               SysRefresh()

               SELECT rca
               SET ORDER TO TAG S5
               GO TOP
               SEEK LEFT( cHbl + SPACE(20), 20 )
               IF ! FOUND()
                  APPEND BLANK
                ELSE
                  cUsa1 := rca->usa
                  cObl1 := rca->obltype
               ENDIF
               DO WHILE (.T.)
                  IF rca->( rlock() )
                     rca->shipname       := cShipname
                     rca->shipadd1       := cShipadd1
                     rca->shipadd2       := cShipadd2
                     rca->shipadd3       := cShipadd3
                     rca->shipadd4       := cShipadd4
                     rca->consname       := cConsname
                     rca->consadd1       := cConsadd1
                     rca->consadd2       := cConsadd2
                     rca->consadd3       := cConsadd3
                     rca->consadd4       := cConsadd4
                     rca->notiname       := cNotiname
                     rca->notiadd1       := cNotiadd1
                     rca->notiadd2       := cNotiadd2
                     rca->notiadd3       := cNotiadd3
                     rca->notiadd4       := cNotiadd4
                     rca->mode           := "O"
                     rca->trans          := "E"
                     rca->svc            := cSvc
                     rca->ref            := cRef
                     rca->master         := cMbl
                     rca->house          := cHbl
                     rca->booking        := cBkg
                     rca->orgcd          := cRcptcd
                     rca->origin         := cRcpt
                     rca->polcd          := cPolcd
                     rca->pol            := cPol
                     rca->poulcd         := cPoulcd
                     rca->poul           := cPoul
                     rca->destcd         := cDstcd
                     rca->dest           := cDest
                     rca->plccd          := cDstcd
                     rca->plc_delv       := cDest
                     rca->carrier        := cCarrier
                     rca->vessel         := cVessel
                     rca->voyage         := cVoy
                     rca->comm           := cComm
                     rca->pcs            := VAL( cPcs )
                     rca->pkg            := cPkg
                     rca->kgs            := VAL( cKgs )
                     rca->cm             := VAL( cCbm )
                     rca->etd            := CTOD( cEtd )
                     rca->eta            := CTOD( cEta )
                     rca->date           := DATE()
                     rca->time           := TIME()
                     rca->serial         := cRef
                     rca->overseas       := cOverseas
                     rca->usa            := cUsa
                     rca->week           := cWk
                     rca->sono           := cSoNo
                     rca->obltype        := cObtype
                     rca->door           := cDoor
                     rca->blform         := cBlform
                     rca->sales1         := cSales
                     rca->docdate        := CTOD( cDocdate )
                     rca->lastdate       := DATE()
                     rca->lasttime       := LEFT(TIME(),5)

                     // USA Destination changes...
                     IF ! EMPTY( cUsa1 )
                        IF ! ( ALLTRIM( cUsa1 ) == ALLTRIM( cUsa ) )
                           rca->manifest := ""
                           rca->file     := ""
                           rca->usaold   := cUsa1
                           rca->usadate  := DATE()
                           rca->usatime  := TIME()
                           rca->prthd    := CTOD( "  /  /  " )
                           rca->prtmd    := CTOD( "  /  /  " )
                           rca->prtfd    := CTOD( "  /  /  " )
                           rca->prtid    := CTOD( "  /  /  " )
                           lEmail        := .T.
                           lDest         := .T.
                        ENDIF
                     ENDIF

                     IF ! EMPTY( cObl1 )
                        IF ( ALLTRIM( cObl1 )$"3S" ) .AND. ( ALLTRIM(cObtype)="0" )
                           rca->obltypeold  := cObl1
                           rca->obltypedte  := DATE()
                           rca->obltypetme  := TIME()
                           lEmail           := .T.
                           lObl             := .T.
                        ENDIF
                     ENDIF

                     rca->( dbunlock() )
                     EXIT
                  ENDIF
               ENDDO
               rca->( dbcommit() )

               // Email...
               IF lEmail

                  DO CASE
                     CASE lDest .AND. lObl
                          cSubject := "Apex_CTS_destination_station_change_AND_telex_release_notification"
                     CASE lDest
                          cSubject := "Apex_CTS_destination_station_change"
                     CASE lObl
                          cSubject := "Apex_CTS_telex_release_notification"
                  ENDCASE

                  // Init...
                  cTo := <!-- e --><a href="mailto:'info@cdmsoft.com">'info@cdmsoft.com</a><!-- e -->'
                  cCClist := "&lt;darrell.ortiz@cdmsoft.com&gt;"

                  cMsg := LEFT( "EMAIL TO"              + SPACE(20), 20 ) + " : " + cTo           + cEol
                  cMsg += LEFT( "EMAIL CC"              + SPACE(20), 20 ) + " : " + cCClist       + cEol
                  cMsg += LEFT( "ORIGIN STATION"        + SPACE(20), 20 ) + " : " + cOverseas     + cEol
                  cMsg += LEFT( "OLD USA STATION"       + SPACE(20), 20 ) + " : " + cUsa1         + cEol
                  cMsg += LEFT( "NEW USA STATION"       + SPACE(20), 20 ) + " : " + cUsa          + cEol
                  cMsg += LEFT( "APEX HBL"              + SPACE(20), 20 ) + " : " + cHbl          + cEol
                  cMsg += LEFT( "MBL"                   + SPACE(20), 20 ) + " : " + cMbl          + cEol
                  cMsg += LEFT( "CARRIER"               + SPACE(20), 20 ) + " : " + cCarrier      + cEol
                  cMsg += LEFT( "VESSEL"                + SPACE(20), 20 ) + " : " + cVessel       + cEol
                  cMsg += LEFT( "VOYAGE"                + SPACE(20), 20 ) + " : " + cVoy          + cEol
                  cMsg += LEFT( "ETD"                   + SPACE(20), 20 ) + " : " + cEtd          + cEol
                  cMsg += LEFT( "PORT OF LOADING"       + SPACE(20), 20 ) + " : " + cPol          + cEol
                  cMsg += LEFT( "PORT OF DISCHARGE"     + SPACE(20), 20 ) + " : " + cPoul         + cEol
                  cMsg += LEFT( "ETA"                   + SPACE(20), 20 ) + " : " + cEta          + cEol
                  cMsg += LEFT( "FINAL DESTINATION"     + SPACE(20), 20 ) + " : " + cDest         + cEol
                  cMsg += LEFT( "SHIPPER"               + SPACE(20), 20 ) + " : " + cShipname     + cEol
                  cMsg += LEFT( "CONSIGNEE"             + SPACE(20), 20 ) + " : " + cConsname     + cEol
                  cMsg += LEFT( "OBL TYPE"              + SPACE(20), 20 ) + " : " + cObtype       + cEol

                  // Create file...
                  cMsgfile = ALLTRIM(cHbl)+".TXT"
                  hCts = FCREATE( cMsgfile, 0)
                  FWRITE( hCts, cMsg )
                  FCLOSE( hCts )

                  // Send email...
                  IF ! EMPTY( cTo )
                     cCmd := "mailer " + cFrom + ' ' + cTo + ' ' + cSubject + ' ' + cMsgfile + ' ' + cCClist
                     WaitRun( cCmd, 2 )
                  ENDIF
               ENDIF

               cSay := "Resetting RCACTNR " + cOverseas + " - " + cHbl + " . . ."
               oSay:Refresh()
               SysRefresh()

               // RCACTNR...
               SELECT rcactnr
               SET ORDER TO TAG S1
               GO TOP
               SEEK rca-&gt;serial
               IF FOUND()
                  DO WHILE ! EOF() .AND. ( rca-&gt;serial == rcactnr-&gt;serial )
                     DO WHILE (.T.)
                        IF rcactnr-&gt;( rlock() )
                           rcactnr-&gt;code    := SPACE(1)
                           rcactnr-&gt;( dbunlock() )
                           EXIT
                        ENDIF
                     ENDDO
                     SELECT rcactnr
                     SKIP
                  ENDDO
               ENDIF

               cSay := "Resetting RCAPO " + cOverseas + " - " + cHbl + " . . ."
               oSay:Refresh()
               SysRefresh()

               // RCAPO...
               DO WHILE (.T.)
                  SELECT rcapo
                  SET ORDER TO TAG S1
                  GO TOP
                  SEEK rca-&gt;serial
                  IF FOUND()
                     DO WHILE (.T.)
                        IF rcapo-&gt;( rlock() )
                           rcapo-&gt;( dbdelete() )
                           rcapo-&gt;( dbunlock() )
                           EXIT
                        ENDIF
                     ENDDO
                   ELSE
                     EXIT
                  ENDIF
               ENDDO

               // Container...
               FOR nC=1 TO nCtnr

                   // Init...
                   cCC := aCtnr[nC]
                   nCC := 0
                   cTT := ""
                   AFILL( aCC, "" )

                   FOR nC1=1 TO LEN(cCC)
                       cChar := SUBSTR( cCC, nC1, 1 )
                       IF cChar="*" .OR. ( nC1 = LEN(cCC) )
                          IF (nCC&lt;9)
                             IF ( nC1 = LEN(cCC) )
                                cTT += cChar
                             ENDIF
                             nCC++
                             aCC[nCC] := cTT
                          ENDIF
                          cTT      := ""
                        ELSE
                          cTT      += cChar
                       ENDIF
                   NEXT nC1

                   cSay := "Uploading RCACTNR " + cOverseas + " - " + cHbl + " . . ."
                   oSay:Refresh()
                   SysRefresh()

                   // Update...
                   SELECT rcactnr
                   SET ORDER TO TAG S1
                   GO TOP
                   SEEK LEFT( cRef + SPACE(10), 10) + LEFT( aCC[01] + SPACE(15), 15 )
                   IF ! FOUND()
                      APPEND BLANK
                   ENDIF
                   DO WHILE (.T.)
                      IF rcactnr-&gt;( rlock() )
                         rcactnr-&gt;serial         := cRef
                         rcactnr-&gt;ctnr           := aCC[01]
                         rcactnr-&gt;size           := aCC[02]
                         rcactnr-&gt;seal           := aCC[03]
                         rcactnr-&gt;pcs            := VAL(aCC[04])
                         rcactnr-&gt;uom            := aCC[05]
                         rcactnr-&gt;svc            := aCC[06]
                         rcactnr-&gt;kgs            := VAL(aCC[07])
                         rcactnr-&gt;cbm            := VAL(aCC[08])
                         rcactnr-&gt;packmemo       := aCC[09]
                         rcactnr-&gt;code           := "U"
                         rcactnr-&gt;( dbunlock() )
                         EXIT
                      ENDIF
                   ENDDO
                   rcactnr-&gt;( dbcommit() )

               NEXT nC

               // Remove Non-Updated containers...
               DO WHILE (.T.)
                  SELECT rcactnr
                  SET ORDER TO TAG S2
                  GO TOP
                  SEEK rca-&gt;serial + SPACE(1)
                  IF FOUND()
                     DO WHILE (.T.)
                        IF rcactnr-&gt;( rlock() )
                           rcactnr-&gt;( dbdelete() )
                           rcactnr-&gt;( dbunlock() )
                           EXIT
                        ENDIF
                     ENDDO
                   ELSE
                     EXIT
                  ENDIF
               ENDDO

               // Purchase Orders...
               FOR nP=1 TO nPo

                   // Init...
                   cCC := aPo[nP]
                   nCC := 0
                   cTT := ""
                   AFILL( aCC, "" )

                   FOR nC1=1 TO LEN(cCC)
                       cChar := SUBSTR( cCC, nC1, 1 )
                       IF cChar="*" .OR. ( nC1 = LEN(cCC) )
                          IF ( nC1 = LEN(cCC) )
                             cTT += cChar
                          ENDIF
                          nCC++
                          aCC[nCC] := cTT
                          cTT      := ""
                        ELSE
                          cTT      += cChar
                       ENDIF
                   NEXT nC1

                   cSay := "Uploading RCAPO " + cOverseas + " - " + cHbl + " . . ."
                   oSay:Refresh()
                   SysRefresh()

                   // Update...
                   SELECT rcapo
                   SET ORDER TO TAG S1
                   GO TOP
                   SEEK LEFT( cRef + SPACE(10), 10) + LEFT( aCC[01] + SPACE(35), 35 ) + LEFT( aCC[02] + SPACE(35), 35 ) + LEFT( aCC[04] + SPACE(15), 15 )
                   IF ! FOUND()
                      APPEND BLANK
                   ENDIF
                   DO WHILE (.T.)
                      IF rcapo-&gt;( rlock() )
                         rcapo-&gt;serial         := cRef
                         rcapo-&gt;ponum          := aCC[01]
                         rcapo-&gt;invoice        := aCC[02]
                         rcapo-&gt;item           := aCC[03]
                         rcapo-&gt;ctnr           := aCC[04]
                         rcapo-&gt;( dbunlock() )
                         EXIT
                      ENDIF
                   ENDDO
                   rcapo-&gt;( dbcommit() )
               NEXT nP

               // Init...
               cOverseas := ""
               cUsa      := ""
               cProfile  := ""
               cShipname := ""
               cShipadd1 := ""
               cShipadd2 := ""
               cShipadd3 := ""
               cShipadd4 := ""
               cSvc      := ""
               cRef      := ""
               cMbl      := ""
               cHbl      := ""
               cBkg      := ""
               cConsname := ""
               cConsadd1 := ""
               cConsadd2 := ""
               cConsadd3 := ""
               cConsadd4 := ""
               cNotiname := ""
               cNotiadd1 := ""
               cNotiadd2 := ""
               cNotiadd3 := ""
               cNotiadd4 := ""
               cRcptcd   := ""
               cRcpt     := ""
               cPolcd    := ""
               cPol      := ""
               cPoulcd   := ""
               cPoul     := ""
               cDstcd    := ""
               cDest     := ""
               cCarrier  := ""
               cVessel   := ""
               cVoy      := ""
               cComm     := ""
               cPcs      := ""
               cPkg      := ""
               cKgs      := ""
               cCbm      := ""
               cEtd      := ""
               cDocdate  := ""
               cEta      := ""
               cWk       := ""
               cSoNo     := ""
               cObtype   := ""
               cDoor     := ""
               cBlform   := ""
               cSales    := ""
               nCtnr     := 0
               nPo       := 0
               lStart    := .F.
               AFILL( aCtnr, "" )
               AFILL( aPo  , "" )

            ENDIF

         ENDDO

         // Close...
         FCLOSE( hCTS )
         FCLOSE( hLog )
*~*~*~*~*~*~*~*~*~*
Darrell Ortiz
CDM Software Solutions, Inc.
https://www.cdmsoft.com
Posts: 840
Joined: Thu Oct 13, 2005 07:05 PM
Problem reading text file
Posted: Thu Oct 12, 2006 04:41 PM

Forget about low level acces to a text file.

Go straight with a BIG string, I mean, add the values to a single string variable, and then do a MEMORIT() and you are donde.

At 32 bits you are not longer limited to the 64 kbytes of clipper, now you string variables can hold up to 4Gbytes of information, then a simple Memowrit() can you what you want.

Saludos

R.F.

Continue the discussion