2013-08-06 41 views
0

我已經嘗試了幾種不同的方法,它們都不能正常工作,所以我只是直接尋找某人告訴我如何去做。我希望我的應用程序可以讀取基於OpenFileDialog的文件。SubString編輯

當讀取文件時我想通過它並運行這個函數,它使用Linq將數據插入到我的數據庫中。

objSqlCommands.sqlCommandInsertorUpdate 

但是我想通過字符串,計算找到的「,」的數量。當數字達到四時,我只想把遇到的字符直到下一個「,」這樣做,直到文件結尾..有人可以告訴我如何做到這一點?

基於這裏給出我的代碼現在看起來像這樣

串FILETEXT = File.ReadAllText(ofd.FileName).Replace(Environment.NewLine, 「」)的答案;

   int counter = 0; 
       int idx = 0; 
       List<string> foo = new List<string>(); 

       foreach (char c in fileText.ToArray()) 
       { 
        idx++; 
        if (c == ',') 
        { 
         counter++; 
        } 
        if (counter == 4) 
        { 
         string x = fileText.Substring(idx); 
         foo.Add(fileText.Substring(idx, x.IndexOf(','))); 
         counter = 0; 
        } 
       } 

       foreach (string s in foo) 
       { 
        objSqlCommands.sqlCommandInsertorUpdate("INSERT", s);//laClient[0]); 
       } 

但是我得到的「長度不能小於0」誤差的foo.add函數調用,任何想法?

+0

我想你應該提供一些例子:'input'和'output',關於你的函數的更多信息:'i ts簽名包括返回類型和參數。 –

+0

告訴我們您嘗試過的。爲了讓你開始看看'File.ReadAllLines()'和'String.Split()' –

+0

@KinngKing,輸入只是一個普通的txt文件,然後讀入字符串列表。之後,它應該只是一個簡單的字符串操作,但我不能讓它的工作,所以我打開所有想法 – user2546071

回答

1

File.ReadAllText讀取的文本文件爲字符串,並Split原來是串入的逗號分隔的數組:

File.ReadAllText(OpenDialog.FileName).Split(',')[4] 

如果你有一個以上的在線使用:

File.ReadAllLines(OpenDialog.FileName).Select(l => l.Split(',')[4]) 

這使一個IEnumerable<string>其中每個字符串包含文件一行中的有用部分

+0

這似乎工作,但它不會超過txt文件中的第一行,我的代碼現在看起來像這個foreach(string [] laClient in lsClientList) { string records = File.ReadAllText(ofd.FileName).Split(',')[4]; //完整地逐行讀取文件 – user2546071

+0

我編輯了我的答案。 – Raidri

2

一個有點冒失的例子。您可以將整個文本作爲單個字符串傳遞給您的文件。

string str = "1,2,3,4,i am some text,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20"; 
int counter = 0; 
int idx = 0; 
List<string> foo = new List<string>(); 

foreach (char c in str.ToArray()) 
{ 
    idx++; 
    if (c == ',') 
    { 
      counter++; 
    } 
    if (counter == 4) 
    { 
      string x = str.Substring(idx); 
      foo.Add(str.Substring(idx, x.IndexOf(','))); 
      counter = 0; 
    } 
} 

foreach(string s in foo) 
{ 
    Console.WriteLine(s); 
} 
Console.Read(); 

打印:

  • i am some text
  • 9
  • 13
  • 17
+1

沒有問題,如果它的哈克大聲笑只是想在這個階段完成,謝謝,雖然這看起來不錯,我將能夠使用這個! – user2546071

+0

沒問題,樂意幫忙 – DGibbs

1

由於Raidri表示他的回答,String.Split絕對是你的朋友。要抓住每一個第五字,你可以嘗試這樣的事情(未測試):

string fileText = File.ReadAllText(OpenDialog.FileName).Replace(Environment.NewLine, ","); 

string words[] = fileText.Split(','); 

List<string> everFifthWord = new List<string>(); 

for (int i = 4; i <= words.Length - 1, i + 5) 
{ 
    everyFifthWord.Add(words[i]); 
} 

上面的代碼讀取來自OpenFileDialog所選的文件,然後替換每換行了「」。然後它將字符串拆分爲「,」,並從第五個字開始,每隔一個字就將其添加到列表中。

0

對於我而言,如果您在逗號之間每隔五分之一的文本之後,或者如果有多行並且您只想要每行的第五段文本,我都不清楚。所以我做了兩個。

五分之一的一段文字:

var text = "1,2,3,4,i am some text,6,7,8,9" 
    + ",10,11,12,13,14,15,16,17,18,19,20"; 

var everyFifth = 
    text 
     .Split(',') 
     .Where((x, n) => n % 5 == 4); 

everyFifth

只有在每一行第五支文:

var lines = new [] 
{ 
    "1,2,3,4,i am some text,6,7", 
    "8,9,10,11,12,13,14,15", 
    "16,17,18,19,20", 
}; 

var fifthOnEachLine = 
    lines 
     .Select(x => x.Split(',')[4]); 

fifthOnEachLine