英文:
Searching in a List<string> for all lines with a string less than 10 characters
问题
我有一个包含5列(制表符分隔)记录的文件。
我有一个公共类,在其中为每一列创建了公共字符串。
使用LINQ来查找所有第五列的行,其中字符串长度小于10个字符。
class VogueRec
{
public string DOMAIN { get; set; }//0
public string CLASSNAME { get; set; } //1
public string CLASS { get; set; }//2
public string KEYNAME { get; set; }//3
public string KEY { get; set; }//4
}
最佳方法是如何使查询的结果填充一个新的 List<string>
,从 List<string>1
的查找中,其中 KEY
的字符串长度小于10个字符,然后将其写入一个新的 List<string>
中。
var lsCorrel = new List<VogueRec>();
using (StreamReader sr = new StreamReader(fs))
{
while ((sData = sr.ReadLine()) != null)
{
if ((sData.IndexOf("\t")) == -1)
sData = sr.ReadLine();//jump over the code page in an correl export.//ignore line 1.
else
{
#region READ USER
aSplit = sData.Split('\t');
while (aSplit[1] == "USER")
{
if (aSplit[3] != "CITY")
{
if (aSplit[3].IndexOf("CIT") == 0 || aSplit[3].IndexOf("VOICE") == 0)
{
lsCorrel.Add(new VogueRec()
{
DOMAIN = aSplit[0],
CLASS = aSplit[2],
KEYNAME = aSplit[3],
KEY = aSplit[4].Substring(Math.Max(0, aSplit[4].Length - 5))
});
}
}
break;
}
#endregion
}
}
}
var result = lsCorrel.Where(v => v.KEY.Length < 10);
英文:
I have a file with a 5 columns (tab delimited) record per line.
I have a public class where I created public string for each column.
Using LINQ to find all lines where the fifth column has a string less than 10 characters.
class VogueRec
{
public string DOMAIN { get; set; }//0
public string CLASSNAME { get; set; } //1
public string CLASS { get; set; }//2
public string KEYNAME { get; set; }//3
public string KEY { get; set; }//4
}
What is the best way to have the result of a query populate a new List<string> from a FindAll search of List<string>1.KEY lenght of string is < 10 then write to a new List<string>.
var lsCorrel = new List<VogueRec>();
using (StreamReader sr = new StreamReader(fs))
{
while ((sData = sr.ReadLine()) != null)
{
if ((sData.IndexOf("\t")) == -1)
sData = sr.ReadLine();//jump over the code page in an correl export.//ignore line 1.
else
{
#region READ USER
aSplit = sData.Split('\t');
while (aSplit[1] == "USER")
{
if (aSplit[3] != "CITY")
{
if (aSplit[3].IndexOf("CIT") == 0 || aSplit[3].IndexOf("VOICE") == 0)
{
lsCorrel.Add(new VogueRec()
{
DOMAIN = aSplit[0],
CLASS = aSplit[2],
KEYNAME = aSplit[3],
KEY = aSplit[4].Substring(Math.Max(0, aSplit[4].Length - 5))
});
}
}
break;
}
#endregion
}
}
}
var result = lsCorrel.Where(v => v.KEY.Length < 10);
答案1
得分: 1
list.Where(v => v.KEY.Length < 10)也许?你目前有什么进展? - Charlieface 5小时前 有效。这是我的案例的答案。
英文:
list.Where(v => v.KEY.Length < 10) maybe? What do you have so far? –
Charlieface
5 hours ago
worked. This is the answer my case.
答案2
得分: 0
你首先逐行读取数据,并将键值小于10的内容放入一个列表中。
列分隔符:制表符("\t")
行分隔符:换行
public class TestReadFile
{
public List<VogueRec> Get()
{
string path = @"D:\f.txt";
List<VogueRec> VogueRecs = new List<VogueRec>();
using (StreamReader sr = new StreamReader(path))
{
while (sr.Peek() >= 0)
{
string str;
string[] strArray;
str = sr.ReadLine();
strArray = str.Split('\t');
if (strArray[4].Length < 10)
{
VogueRecs.Add(new VogueRec()
{
DOMAIN = strArray[0], CLASSNAME = strArray[1], CLASS = strArray[2], KEYNAME = strArray[3], KEY = strArray[4]
});
}
}
}
return VogueRecs;
}
}
使用方式:
TestReadFile testReadFile = new TestReadFile();
var _list= testReadFile.Get();
示例:
fdfsf sdsds dddd dddd 142425414251
asas ddd ssss ssss 14200
asa sss dddd 222 ssss
asa sss dd22d sss 14501235647
结果:
asas ddd ssss ssss 14200
asa sss dddd 222 ssss
英文:
You first read the data line by line and put the key value less than 10 in a list
column separator: Tab("\t")
Line separator: line
public class TestReadFile
{
public List<VogueRec> Get()
{
string path = @"D:\f.txt";
List<VogueRec> VogueRecs = new List<VogueRec>();
using (StreamReader sr = new StreamReader(path))
{
while (sr.Peek() >= 0)
{
string str;
string[] strArray;
str = sr.ReadLine();
strArray = str.Split('\t');
if (strArray[4].Length < 10)
{
VogueRecs.Add(new VogueRec() {
DOMAIN = strArray[0], CLASSNAME = strArray[1], CLASS = strArray[2], KEYNAME = strArray[3], KEY = strArray[4]
});
}
}
}
return VogueRecs;
}
}
Use
TestReadFile testReadFile = new TestReadFile();
var _list= testReadFile.Get();
Example
> fdfsf sdsds dddd dddd 142425414251
> asas ddd ssss ssss 14200
> asa sss dddd 222 ssss
> asa sss dd22d sss 14501235647
Result
> asas ddd ssss ssss 14200
> asa sss dddd 222 ssss
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论