簡體   English   中英

嘗試將文件中的令牌放入不包含空格的字符串數組中

[英]Trying to put tokens from a file into a string array excluding blank spaces

我正在嘗試拆分文件中的所有字符串,並將它們放入數組中,並排除所有空白行和制表符,但是在打印時,數組中仍存在空白條目。 空白點是換行的地方,但我認為它們會被刪除,而我的aa數組中的字符將被刪除。

        string line;
        List<string> tokenList = new List<string>();
        char[] aa = new char[] {' ', '\t', '\r', '\n'};
        do {
            line = sr.ReadLine();
            foreach(var test in line.Split(aa)) {
                if(test != null) {
                    //System.Console.WriteLine(test);
                    tokenList.Add(test);
                }
            }
        } while(sr.EndOfStream != true);
        foreach(var toke in tokenList) {
            System.Console.WriteLine(toke);
        }

我正在閱讀的示例文件:

DECLARE
    my_char CHAR;
    my_vchar VARCHAR2 ( 6 ) :='JOHN';
    my_bool BOOLEAN := NULL ;
    total   SMALLINT(5);
BEGIN
    DBMS_OUTPUT.PUT_LINE ( total) ;
    mychar :=' ';
    total &total;
    DBMS_OUTPUT.PUT ( my_vchar) ;
    DBMS_OUTPUT.PUT ( mychar) ;
    DBMS_OUTPUT.PUT ( total) 
    DBMS_OUTPUT.NEW_LINE ;
ENDl \

采用

line.Split(new string[] { " ", "\t", Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);

代替

line.Split(' ', '\t', '\r', '\n');

您正在拆分回車符和換行符。 在基於Windows的計算機中,這兩個字節一起在一行的末尾使用。

我認為這是您要尋找的:

    string line;
    List<string> tokenList = new List<string>();
    char[] aa = new char[] { ' ', '\t', '\r', '\n' };
    do
    {
        line = sr.ReadLine();
        if (!string.IsNullOrEmpty(line) && !string.IsNullOrWhiteSpace(line))
        {
            foreach (var test in line.Split(aa, StringSplitOptions.RemoveEmptyEntries))
            {
                if (test != null)
                {
                    //System.Console.WriteLine(test);
                    tokenList.Add(test);
                }
            }
        }

    } while (sr.EndOfStream != true);

    foreach (var toke in tokenList)
    {
        System.Console.WriteLine(toke);
    }

1)添加了以下內容以確保您不嘗試處理空行:

if (!string.IsNullOrEmpty(line) && !string.IsNullOrWhiteSpace(line))

2)將您的foreach .split更改為:

foreach (var test in line.Split(aa, StringSplitOptions.RemoveEmptyEntries))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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