簡體   English   中英

如何在C#中將值連接成逗號分隔的值

[英]How to concatenate values in to a comma seperated values in c#

我正在讀取文本文件,我想根據條件獲取值。 首先,我將使用CREID = 639和ISMAINBCCH = YES的FREQ,接下來要做的是我必須用逗號分隔的方式連接FREQ值,其中CELLID = 639和ISMAINBCCH = NO,所以我想要的輸出是24, 28,67。 如何實現呢?

線是

ADD GCELL:CELLID=639, CELLNAME="NR_0702_07021_G1_A", MCC="424", MNC="02", LAC=6112, CI=7021, NCC=6, BCC=0, EXTTP=Normal_cell, IUOTP=Concentric_cell, ENIUO=ON, DBFREQBCCHIUO=Extra, FLEXMAIO=OFF, CSVSP=3, CSDSP=5, PSHPSP=4, PSLPSVP=6, BSPBCCHBLKS=1, BSPAGBLKSRES=4, BSPRACHBLKS=1, TYPE=GSM900_DCS1800, 
......................
.............

ADD GTRX:TRXID=0, TRXNAME="M_RAK_JeerExch_G_1879_18791_A-0", FREQ=81, TRXNO=0, CELLID=639, IDTYPE=BYID, ISMAINBCCH=YES, ISTMPTRX=NO, GTRXGROUPID=2556;
ADD GTRX:TRXID=1, TRXNAME="M_RAK_JeerExch_G_1879_18791_A-1", FREQ=24, TRXNO=1, CELLID=639, IDTYPE=BYID, ISMAINBCCH=NO, ISTMPTRX=NO, GTRXGROUPID=2556;
ADD GTRX:TRXID=5, TRXNAME="M_RAK_JeerExch_G_1879_18791_A-2", FREQ=28, TRXNO=2, CELLID=639, IDTYPE=BYID, ISMAINBCCH=NO, ISTMPTRX=NO, GTRXGROUPID=2556;
ADD GTRX:TRXID=6, TRXNAME="M_RAK_JeerExch_G_1879_18791_A-3", FREQ=67, TRXNO=3, CELLID=639, IDTYPE=BYID, ISMAINBCCH=NO, ISTMPTRX=NO, GTRXGROUPID=2556;

更新

我正在獲得如下所示的值

using (StreamReader sr = File.OpenText(filename))
{
    while ((s = sr.ReadLine()) != null)
    {
        if (s.Contains("ADD GCELL:"))
        {
            var gtrx = new Gtrx
            {
                CellId = int.Parse(PullValue(s, "CELLID")),
                Freq = int.Parse(PullValue(s, "FREQ")),
                TrxNo = int.Parse(PullValue(s, "TRXNO")),
                IsMainBcch = PullValue(s, "ISMAINBCCH").ToUpper() == "YES",
                TrxName = PullValue(s, "TRXNAME"),

            };

        }
    }

UPDATE

我使用了外觀概念,但是現在卻花費了很多時間。 我不確定兩次是否使用任何錯誤邏輯來迭代文本文件,一次用於獲取常規值,另一次用於獲取串聯值

 private class Gtrx
    {
        public int Freq { get; set; }
        public int TrxNo { get; set; }
        public string TrxName { get; set; }
        public int CellId { get; set; }
        public bool IsMainBcch { get; set; }
    }

    private class Gcell
    {
        public int CellId { get; set; }
        public string CellName { get; set; }
        public string Mcc { get; set; }
        public int Lac { get; set; }
        public int Ci { get; set; }
    }
    private class GcellGtrx
    {
        public Gcell Gcell { get; set; }
        public Gtrx Gtrx { get; set; }
    }

using (var sr = new StringReader(data))
{
    string line = sr.ReadLine();
    while (line != null)
    {
        line = line.Trim();
        if (line.StartsWith("ADD GCELL:"))
        {
            var gcell = new Gcell
            {
                CellId = int.Parse(PullValue(line, "CELLID")),
                CellName = PullValue(line, "CELLNAME"),
                Ci = int.Parse(PullValue(line, "CI")),
                Lac = int.Parse(PullValue(line, "LAC")),
                Mcc = PullValue(line, "MCC")
            };
            var gcellGtrx = new GcellGtrx();
            gcellGtrx.Gcell = gcell;
            _dictionary.Add(gcell.CellId, gcellGtrx);
        }
        if (line.StartsWith("ADD GTRX:"))
        {
            var gtrx = new Gtrx
            {
                CellId = int.Parse(PullValue(line, "CELLID")),
                Freq = int.Parse(PullValue(line, "FREQ")),
                TrxNo = int.Parse(PullValue(line, "TRXNO")),
                IsMainBcch = PullValue(line, "ISMAINBCCH").ToUpper() == "YES",
DEFINED_TCH_FRQ = null,
                TrxName = PullValue(line, "TRXNAME")
            };

           if (!intarr.Contains(gtrx.CellId))
                            {

                                if (!_dictionary.ContainsKey(gtrx.CellId))
                                {
                                    // No GCell record for this id. Do something!
                                    continue;
                                }
                                intarr.Add(gtrx.CellId);
                                string results = string.Empty;

                                    var result = String.Join(",",
        from ss in File.ReadLines(filename)
        where ss.Contains("ADD GTRX:")
        where int.Parse(PullValue(ss, "CELLID")) == gtrx.CellId
        where PullValue(ss, "ISMAINBCCH").ToUpper() != "YES"
        select int.Parse(PullValue(ss, "FREQ")));
                                    results = result;


                                var gtrxnew = new Gtrx
                                {
                                    DEFINED_TCH_FRQ = results
                                };

                                _dictionary[gtrx.CellId].Gtrx = gtrx;
        }
        line = sr.ReadLine();
    }
}

UPDATE

最終,我做到了,就像首先使用File將ADD GTRX開頭的行保存到數組中一樣。 Readalllines,然后僅使用該數組來獲取串聯的字符串,而不是存儲整個文本文件並獲得了一些性能改進。

如果我將每個包含成千上萬行的文本文件轉換為xml,然后從xml文件而不是從文本文件中檢索數據,是否會改善性能? 如果我使用數據表和數據集而不是類,性能會有所改善嗎?

創建gtrxs集合以存儲Gtrx對象,並將文件中的數據讀取到gtrxs 然后,您可以使用LINQ(可能需要using System.Linq;進行添加)來找到與您的需求相匹配的Gtrx對象,然后調用Select以獲取Freq值列表。 有了列表后,您可以簡單地使用String.Join(",", freqValues)建立CSV字符串。

var gtrxs = new List<Gtrx>();

using (StreamReader sr = File.OpenText(filename))
{
    while ((s = sr.ReadLine()) != null)
    {


        if (s.Contains("ADD GCELL:"))
        {

            var gtrx = new Gtrx
                                {
                                    CellId = int.Parse(PullValue(s, "CELLID")),
                                    Freq = int.Parse(PullValue(s, "FREQ")),
                                    TrxNo = int.Parse(PullValue(s, "TRXNO")),
                                    IsMainBcch = PullValue(s, "ISMAINBCCH").ToUpper() == "YES",
                                    TrxName = PullValue(s, "TRXNAME"),

                                };

            gtrxs.Add(gtrx);
        }
    }
}

IEnumerable<int> freqValues = gtrxs.Where(x => x.CellId == 639 && x.IsMainBcch == false).Select(x => x.Freq);
string result = String.Join(",", freqValues);

這對您有用嗎?

var result = String.Join(",", 
    from s in File.ReadAllLines(filename)
    where s.Contains("ADD GCELL:")
    where int.Parse(PullValue(s, "CELLID")) == 639
    where PullValue(s, "ISMAINBCCH").ToUpper() != "YES"
    select int.Parse(PullValue(s, "FREQ")));

暫無
暫無

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

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