[英]How can I generate sql inserts from pipe delimited data?
我有一個想在Haskell嘗試做的小項目。 給定一組定界數據,格式如下:
1 |《星球大戰:第四集-新希望》 | 1977 |動作,科幻|喬治·盧卡斯2 |泰坦尼克號| 1997 |戲劇,歷史,浪漫片|詹姆斯·卡梅隆
在Haskell中,如何生成這種格式的sql插入語句?
插入表格值(1,“ Star Wars:Episode IV-A New Hope”,1977“,” Action,Sci-Fi“,” George Lucas“,0);插入表格值(2,” Titanic“,1997 ,“戲劇,歷史,浪漫”,“詹姆斯·卡梅隆”,0);
為了簡化問題,讓我們使用一個參數來判斷哪些列是文本或數字。 (例如0,1,0,1,1)
這是Perl中的解決方案。 現在,我想將Haskell添加到我的工具箱中。
my @ctypes=qw/0 1 0 1 1/; while(<>) { chop; @F=split('\|', $_); print "insert into table values("; foreach my $col (@F) { my $type=shift(@ctypes); print ($type == 1 ? '"'.$col.'"' : $col); print ","; } print "0);\n"; }
import Control.Arrow
import Data.List
main :: IO ()
main = interact $ unlines . map (makeInsert . splitOn '|') . lines
splitOn :: (Eq a) => a -> [a] -> [[a]]
splitOn delim = unfoldr (fmap break') . return
where break' = second (stripPrefix [delim]) . break (== delim)
makeInsert :: [String] -> String
makeInsert parts = "insert into table values(" ++ intercalate "," values ++ ");"
where values = zipWith ($) [id, show, id, show, show] parts ++ ["0"]
盡管您可能想使用Data.List.Split.splitOn
而不是編寫自己的數據,並且show
不一定是引用字符串的正確方法。
讀入數據,在管道符號處分割,正確地轉義所有值,並使用字符串串聯來建立查詢。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.