2012-03-20 75 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 
相关问题