2012-03-20 73 views
-3

我們最近收到了一些帶有製表符分隔符的文件。我應該如何在VS中使用以下代碼?

我們在導入sql server數據庫時遇到了困難。

發送文件的供應商還發送了下面的代碼供我們用於將文件從標籤轉換爲逗號分隔符。

如何在visual studio中使用此文件。

我已經使用過幾次視覺工作室,但我沒有用過這樣的單個文件。

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.IO; 

namespace TabToComma 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
     StreamReader sr; 
     StreamWriter sw; 

     sr = new StreamReader(@"c:\input.txt"); 
     sw = new StreamWriter(@"c:\output.txt"); 

     string nextline; 
     string replacedline; 

     while (sr.Peek() >= 0) 
     { 
      nextline = sr.ReadLine(); 
      replacedline = nextline.Replace('\t',','); // replace each tab in line with a comma 
      sw.WriteLine(replacedline); 
     } 
     sr.Close(); 

     sw.Close(); 

     } 
    } 

} 

或者,如果有人知道我可以用vbscript完成同樣的事情,請指點我正確的方向。

非常感謝提前

+0

你的文件有多大? – Ryan 2012-03-20 19:20:10

+0

個人而言,我建議使用SSIS作業將文件導入數據庫。 – 2012-03-20 19:20:32

+0

爲什麼不使用文本編輯器並做一個簡單的查找和替換? – 2012-03-20 19:20:38

回答

2

而且,這裏是爲Main()內容,可能使您的生活更輕鬆的替代品,只要文件是體面的大小:

foreach(string f in args) { 
    System.IO.File.WriteAllText(f, System.IO.File.ReadAllText(f).Replace('\t', ',')); 
} 

編譯並拖動和您的所有文件拖放到生成的可執行文件。他們會自動轉換。

如果您在編譯時遇到問題,您甚至可以從這裏獲取已編譯的可執行文件:http://dl.dropbox.com/u/2463964/TabsToCommas.exe

+0

謝謝專家。這是很好的迴應。我非常感激。 minitech,main()是什麼意思?我應該在哪裏代替你的代碼?另外,有沒有辦法檢查多個響應,因爲我想給予那些指向我的控制檯應用程序方向的人,當然包括minitech。 – 2012-03-20 19:28:22

+1

+1方式更好的代碼,並且不會丟失對streamreader/streamwriter的處置! – 2012-03-20 19:28:24

+0

哦,線索!我愛他們!這裏是VBScript版本:'CreateObject(「Scripting.FileSystemObject」).OpenTextFile(「c:\ output.txt」,2).WriteLine替換(CreateObject(「Scripting.FileSystemObject」).OpenTextFile(「c:\ input。 txt「,1).ReadAll,vbTab,」,「)' – AutomatedChaos 2012-03-20 19:29:33

6

創建一個控制檯應用程序,並與上面的文本替換產生的Program.cs的內容。然後點擊運行:)

+0

由於某種原因,你的回答的措辭只是提醒我更好的死亡......「如果有什麼東西阻礙你的話......轉彎。」 – 2012-03-20 19:21:53

3

您需要創建一個新的控制檯應用程序,然後將此代碼粘貼到作爲解決方案的一部分創建的示例文件中。然後將「c:\ input.txt」更改爲要轉換的文件,然後點擊運行。

2

好的,這是很好的玩答案,用各種方法如何替換字符串中的字符。但不幸的是,事實並非如此簡單。如何處理逗號中的數據?像Telephone bill{tab}USD{tab}1,234.00變成Telephone bill,USD,1,234.00。插入額外的列並且數據被損壞,因爲數據庫註冊您的電話費只有一美元。幸運的是,問題不是相反,因爲即使The Scripting Guy沒有防水解決方案。

您的供應商應該已交付的是逐行閱讀器,其中每行都將製表符分成具有所有值的數組。然後讀出數組中的所有值,以查看值中是否有一個或多個逗號,並用雙引號包裝它。之後,將該陣列組裝成逗號爲join的字符串,以使其成爲'真實'CSV file

但是如果你能從源頭上解決問題,爲何要經歷所有的麻煩;爲什麼不把數據標記爲SQL中的製表符分隔符?

BULK 
INSERT TableYouWantToImportTo 
FROM 'c:\input.txt' 
WITH 
(
FIELDTERMINATOR = '\t', 
ROWTERMINATOR = '\n' 
) 
GO 
相關問題