VFP 愛用者社區 首頁 VFP 愛用者社區
本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
 
 常見問題常見問題   搜尋搜尋   會員列表會員列表   會員群組會員群組   會員註冊會員註冊 
 個人資料個人資料   登入檢查您的私人訊息登入檢查您的私人訊息   登入登入

csv to dbf

 
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區
上一篇主題 :: 下一篇主題  
發表人 內容
aforangel



註冊時間: 2010-05-24
文章: 117


第 1 樓

發表發表於: 星期四 十月 22, 2020 6:14 pm    文章主題: csv to dbf 引言回覆

CSV有40萬個紀錄, 大約15個欄位
如何可以正確又快速地匯入DBF
試過匯入出現亂碼, 日期匯入後又變成空白等.....
回頂端
檢視會員個人資料 發送私人訊息
syntech



註冊時間: 2003-05-16
文章: 3950
來自: Taipei,Taiwan

第 2 樓

發表發表於: 星期四 十月 22, 2020 8:50 pm    文章主題: 引言回覆

可能你的CSV檔混到不對的東西,
例如,換行記號,非BIG5編碼文字,出現多餘的逗號之類的,

也許你要先經過一個整理的行為,才能匯進來

_________________
如果公司有下列困擾:
1. 找不到便宜,快速,簡易的 生產排程軟體
2. 不知道如何快速排定 採購計劃
3. 成本抓不準,自己算比軟體算有用
4. 想學習系統規劃,想找系統架構的顧問

請聯絡我們,也許我們幫得上忙
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 AIM Address
aforangel



註冊時間: 2010-05-24
文章: 117


第 3 樓

發表發表於: 星期五 十月 23, 2020 11:38 am    文章主題: 引言回覆

代碼:

select(uSDbf2)
  zap
  xx=GETOBJECT("","Excel.Application")
  sh=xx.application
  sh.Workbooks.Open(alltrim(.text1.value))
  for k=1 to 1
    mname= sh.Sheets(k).Name
    sh2=sh.activesheet
    sh.ActiveCell.SpecialCells(11).Select
    jj=sh.ActiveCell.row()
    for i=2 to jj
      m_date=alltrim(sh2.Cells(1,'A').value)
      m_shopid=alltrim(sh2.Cells(1,'B').value)
      m_set_no=sh2.Cells(i,'E').value
      do case
   case vartype(m_set_no) == "C"
          m_set_no = alltrim(m_set_no)
   case vartype(m_set_no) == "N"
          m_set_no = alltrim(str(m_set_no,30))
      endcase
      if !empty(m_set_no)
        m_date=sh2.Cells(i,'A').value
   do case
          case vartype(m_date) == "T"
       m_date = ctod(dtoc(m_date))
     case vartype(m_date) == "D"
     case vartype(m_date) == "C"
       m_date = ctod(m_date)
          case vartype(m_date) == "N"
       m_date = DATE(1899,12,30)+m_date
     otherwise
       m_date = ctod("  /  /  ")
   endcase
   m_shopid=sh2.Cells(i,'B').value
   do case
            case vartype(m_shopid) == "C"
          m_shopid = alltrim(m_shopid)
            case vartype(m_shopid) == "N"
               m_shopid = alltrim(str(m_shopid))
   endcase
   m_shop=alltrim(sh2.Cells(i,'C').value)
   m_invoice=alltrim(sh2.Cells(i,'D').value)
   m_set_desc=alltrim(sh2.Cells(i,'F').value)
   m_typec_acc=sh2.Cells(i,'G').value
   do case
          case vartype(m_typec_acc) == "C"
             m_typec_acc = alltrim(m_typec_acc)
          case vartype(m_typec_acc) == "N"
        m_typec_acc = alltrim(str(m_typec_acc,30))
   endcase                     
   m_type_acc=alltrim(sh2.Cells(i,'H').value)
   m_skuno=sh2.Cells(i,'I').value
   do case
           case vartype(m_skuno) == "C"
              m_skuno = alltrim(m_skuno)
           case vartype(m_skuno) == "N"
         m_skuno = alltrim(str(m_skuno,40))
        endcase
   m_item_desc=alltrim(sh2.Cells(i,'J').value)
   m_qty=sh2.Cells(i,'K').value
   if vartype(m_qty) <> "N"
          m_qty = 0
        endif
   m_net_amt=sh2.Cells(i,'L').value
   if vartype(m_net_amt) <> "N"
          m_net_amt = 0
   endif
   m_org_amt=sh2.Cells(i,'M').value
   if vartype(m_org_amt) <> "N"
          m_org_amt = 0
   endif
   append blank
   replace date with m_date, shopid with m_shopid
        replace shop with m_shop, invoice with m_invoice
        replace set_no with m_set_no, set_desc with m_set_desc
        replace type_acc with m_type_acc, skuno with m_skuno
        replace item_desc with m_item_desc, qty with m_qty
        replace net_amt with m_net_amt, org_amt with m_org_amt
        replace typec_acc with m_typec_acc
      endif
    next i
  next k
回頂端
檢視會員個人資料 發送私人訊息
aforangel



註冊時間: 2010-05-24
文章: 117


第 4 樓

發表發表於: 星期五 十月 23, 2020 11:41 am    文章主題: 引言回覆

點解會所有縮排都消失了, 好難看....

我用這蠢方法, 40萬個RECORD要大約一小時讀入DBF, 有沒有什麼方法可以代替...要寫入一個TEMP.DBF
回頂端
檢視會員個人資料 發送私人訊息
CPS0204



註冊時間: 2014-08-24
文章: 279


第 5 樓

發表發表於: 星期五 十月 23, 2020 2:05 pm    文章主題: 引言回覆

sele your_dbf
append from c:\temp\a1.csv type csv

記得這樣就可以了
回頂端
檢視會員個人資料 發送私人訊息
lygcw9603



註冊時間: 2011-12-25
文章: 99


第 6 樓

發表發表於: 星期五 十月 23, 2020 2:19 pm    文章主題: 引言回覆

先學基礎,再學編程,這樣少走彎路。
回頂端
檢視會員個人資料 發送私人訊息
syntech



註冊時間: 2003-05-16
文章: 3950
來自: Taipei,Taiwan

第 7 樓

發表發表於: 星期五 十月 23, 2020 2:34 pm    文章主題: 引言回覆

CPS0204 寫到:
sele your_dbf
append from c:\temp\a1.csv type csv

記得這樣就可以了



+1
除非有特別的問題

不然就是用 odbc 的方式匯入,
用 excel ole 一行一行方式匯入是最慢的

如果你就是喜歡這樣用,
不要用 cell.value,
用 cell.text 自己轉格式.

_________________
如果公司有下列困擾:
1. 找不到便宜,快速,簡易的 生產排程軟體
2. 不知道如何快速排定 採購計劃
3. 成本抓不準,自己算比軟體算有用
4. 想學習系統規劃,想找系統架構的顧問

請聯絡我們,也許我們幫得上忙
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 AIM Address
garfield
Site Admin


註冊時間: 2003-01-30
文章: 2118


第 8 樓

發表發表於: 星期五 十月 23, 2020 3:55 pm    文章主題: 引言回覆

你在3樓貼文已經幫你加上一些"標籤"及不打勾"關閉這篇文章的表情符號功能", 你可以修改貼文看一下.

你可以用這種方式試看看 AppendFromExcel
原理是透過odbc 開啟excel檔, 用select SQL語法取出資料
https://github.com/hbcdev/cims/blob/master/Progs/appendxlsx.prg

_________________
利用>>搜尋<<的功能會比問的還要快得到答案.
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件
aforangel



註冊時間: 2010-05-24
文章: 117


第 9 樓

發表發表於: 星期六 十月 24, 2020 1:10 am    文章主題: 引言回覆

[quote="CPS0204"]sele your_dbf
append from c:\temp\a1.csv type csv

記得這樣就可以了[/quote]

感謝大大提醒, 其實一開始我都有用APPEND FROM CSV COMMAND
我是直接用POS系統造出來的CSV檔匯入, 匯入後DBF出一堆亂碼, 我以為這樣匯入會有問題, 才自己寫COMMAND逐行讀入, 所以讀入時間太長,

今晚再試, 先用EXCEL開POS的CSV檔, 什麼也不改就再另存一個CSV檔去匯入, 就成功了, 所有亂碼不見了, 40萬個RECORD讀入時由1小時變成1分鐘.....太興奮了
回頂端
檢視會員個人資料 發送私人訊息
aforangel



註冊時間: 2010-05-24
文章: 117


第 10 樓

發表發表於: 星期六 十月 24, 2020 1:09 pm    文章主題: 引言回覆

今早又出意外了, 昨晚在家中試, 所有欄位的正確讀入, 今早在公司再試, 日期欄位壑J不到, 明明CSV檔日期正常, 但匯入到DBF BROWSE出來看日期都變空白, 請問大大知是什麼原因嗎?
.
.
.
.
已解決 !!
回頂端
檢視會員個人資料 發送私人訊息
從之前的文章開始顯示:   
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區 所有的時間均為 台北時間 (GMT + 8 小時)
1頁(共1頁)

 
前往:  
無法 在這個版面發表文章
無法 在這個版面回覆文章
無法 在這個版面編輯文章
無法 在這個版面刪除文章
無法 在這個版面進行投票
無法 在這個版面附加檔案
無法 在這個版面下載檔案


Powered by phpBB © 2001, 2005 phpBB Group
正體中文語系由 phpbb-tw 維護製作