posts - 188,comments - 176,trackbacks - 0

                在博文之前,先介紹一下文本模式和二進制模式的差別,兩者主要是在回車換行的處理上,不同系統(tǒng)對回車換行的處理不一致。

                CR:  Carriage Return,   0X0D,   “\r”
                LF:  Line Feed,         0X0A,   “\n”

                Dos和Windows采用回車+換行(CR+LG)表示下一行
                UNIX采用換行符 (LF)表示下一行
                MAC機采用回車符(CR)表示下一行

                最近一直在開發(fā)湖北現(xiàn)場的割接工具,工具的執(zhí)行流程貫穿到系統(tǒng)多個模塊。和同事一起配合,同事開發(fā)的工具從現(xiàn)場的系統(tǒng)A中將數(shù)據(jù)導出到文本,然后由我的工具來將這些文本導入到現(xiàn)場的項目B中,也就是我們常說的數(shù)據(jù)割接,原因是項目升級,運營商已經商用的數(shù)據(jù)需要在新平臺上繼續(xù)使用。

                開發(fā)環(huán)境:SUSE Linux + Oracle

                測試環(huán)境:HP + Oracle

                FTP上傳工具:FlashFXP

                注:在windows下編寫完程序后FTP至SUSE或HP下進行調試和測試

                開發(fā)自測完,代碼提交CC,書寫操作手冊,自測完畢工具打包,程序的整個流程都按照需求描述成功走完,并能順利將各個流程連貫起來。以為這次應該是沒問題的,拿到現(xiàn)場應該是能順利進行使用的,但沒預料,還沒發(fā)到現(xiàn)場,在測試部測試這一環(huán)節(jié)就出現(xiàn)了問題,本定于昨天早上8:30發(fā)到現(xiàn)場,但由于測試沒有通過,頂著現(xiàn)場和領導們的壓力,拉上我?guī)熜郑蛱煲徽炫阄以跍y試部整代碼,反復調試和測試。終于在下午5點鐘找到問題的根源:

                 windows下的文本文件是的換行處理是采用回車+換行(0D0A)的方式,linux下的文本文件的換行處理是采用換行(0A)的方式。在windows本地通過二進制方式從windows xp上傳FTP到suse liunx后,windows下的回車換行符"\r\n"到了suse linux下并沒有變?yōu)閘inux下的換行符"\n",也就是文本文件以二進制FTP到liunx下時,在文本記錄中每行末尾追加了"\r\n",而通常如果以ASCII文本方式上傳到suse linux后,文本每行的"\r"在suse會過濾掉的。于是部署在suse linux上的shell腳本在調用sqlldr函數(shù)將上傳后的文本導入到系統(tǒng)B中,sqlldr總是提示字段值過長的異常信息,顯然文本數(shù)據(jù)沒有導入成功,因為oracle表中的字段定義為char(14),而上傳后的文本文件的最后一個字段本來是14位,但加了"\r\n"后就變?yōu)?6位。于是針對這個文本字段sqlldr到oracle時就會提示字段過長而插入不成功了。問題定位后,轉而將文件以ASCII方式FTP至服務器上后,程序運行完全正常,問題解決。
                同時測試發(fā)現(xiàn),通過jsp流從windows上傳文本文件到suse linux上時,文本文件中的"\r\n"到suse上后還是存在"\r\n",也沒有轉換為"\n"。


            

           

           

           

           

          posted on 2008-03-27 19:50 cheng 閱讀(2782) 評論(4)  編輯  收藏 所屬分類: Unix/Linux

          FeedBack:
          # re: 回車符和二進制引發(fā)的問題
          2008-03-28 07:16 | ZelluX
          常識。。。否則還要line.separator這東東干嘛。。。  回復  更多評論
            
          # re: 回車符和二進制引發(fā)的問題
          2008-03-28 15:11 | cheng
          是啊,嗯...呵呵
          理論知識還需鞏固和加強.  回復  更多評論
            
          # re: 回車符和二進制引發(fā)的問題
          2008-03-28 16:09 | 草包書生
          good  回復  更多評論
            
          # re: 回車符和二進制引發(fā)的問題
          2008-07-17 11:10 | xx
          有道理 我剛剛也遇到了這樣的問題 發(fā)現(xiàn)在linux下使用dos2unix也可以解決  回復  更多評論
            
          主站蜘蛛池模板: 江口县| 武宁县| 岗巴县| 南召县| 陆河县| 娱乐| 成都市| 元阳县| 延庆县| 买车| 阳高县| 黄浦区| 文水县| 手机| 大邑县| 嵊州市| 周宁县| 武义县| 承德市| 新源县| 延津县| 新余市| 河北区| 溆浦县| 公主岭市| 石林| 师宗县| 新密市| 嘉义县| 连云港市| 景泰县| 平陆县| 靖安县| 十堰市| 宁陕县| 台东县| 宁蒗| 平乡县| 安图县| 庐江县| 鄱阳县|