簡體   English   中英

如何從管道定界數據生成sql插入?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM