0

我有沒有一個固定的結構的平面文件一樣的Delimeter文件的問題

name,phone_num,Address 
bob,8888,2nd main,5th floor,avenue road 

這裏的最後一列Address有值2nd main,5th floor,avenue road但由於相同的分隔符,用於分隔條件列還我沒有得到任何線索如何處理相同。

平面文件的結構可能會因文件而異。 如何在導入時使用這種平面文件Informatica or SQL * Loader or UTL Files

我不會對平面文件有任何訪問權限,只是我應該從中讀取數據,但我無法編輯平面文件中的數據。

+1

使用轉義字符,例如'\'。配置您的加載器以使用此轉義字符。 – Rachcha 2013-03-25 10:27:43

+0

@Rachcha U意味着在'control file'中指定轉義字符,如果我知道以這種格式獲取數據的列的位置,我可以這樣做!但列位置是動態的 – Aspirant 2013-03-25 10:31:31

回答

5

使用SQLLOADER

load data 
append 
into table schema.table 
fields terminated by '~' 
trailing nullcols 
(
    line  BOUNDFILLER, 
    name  "regexp_substr(:line, '^[^,]+')", 
    phone_num "regexp_substr(:line, '[^,]+', 1, 2)", 
    Address "regexp_replace(:line, '^.*?,.*?,')" 
) 
+1

在那裏,我寫了一篇關於如何使用UTL_FILES和一堆醜陋,亂七八糟的代碼來解決這個問題的長篇大論。很好的回答 - 它幫助我完成了我太冗長混亂的回答! – 2013-03-25 10:58:43

+0

你不是指「字段終止','」,它仍然可以與正則表達式然後? – Gyan 2013-03-25 12:51:12

+0

@Raghav - '〜'可以替換爲數據文件 – 2013-03-25 12:55:47

0

你需要改變你的源文件封裝領域中的轉義字符如:

name,phone_num,Address 
bob,8888,^2nd main,5th floor,avenue road^ 

然後在SQL裝載機你會把:

FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '^' 

隨便挑定界符通常不會顯示在您的數據中。

+0

如果我有權訪問源平面文件,我可以按照您的建議做!但因爲我沒有訪問權限,所以還有其他方法可以解決這個問題。 – Aspirant 2013-03-25 10:36:55

0

如果你能得到雙引號(或與此有關的任何引號),你可以使用「可選行情」在Informatica的選項中包圍的源數據,同時從平面文件

閱讀