在文本中搜索特定字符串然后只显示其中一部分的最有效方法是什么?
以下是我的情况:我目前正在我的服务器上托管.txt文件。我想要创建的函数将访问此.txt(甚至可能下载效率?),搜索ID(例如300000000)然后将名称放在一个字符串中(例如Island Andrew)。
以下是我服务器上托管的.txt文件示例:
ID: 300000000 NAME: Island Andrew
ID: 300000100 NAME: Island Bob
ID: 300000010 NAME: Island George
ID: 300000011 NAME: Library
ID: 300000012 NAME: Cellar
我已经完成了类似示例的代码,但格式不同,而且不在c#中。
这是;
如果有人可以帮助我在c#中完成此任务,我们将不胜感激。
感谢。
答案 0 :(得分:1)
您可以尝试在C#中创建名称数组:
Dictionary<int,String> mapDictionary;
string[] mapNames = rawData.Split(splitChar, StringSplitOptions.None);
foreach(String str in mapNames)
{
{
String mapid = str.Substring(str.IndexOf(":"));
String mapname = str.Remove(0, str.IndexOf(':') + 1);
mapDictionary.Add(Convert.ToInt32(mapid), mapname);
}
}
答案 1 :(得分:1)
没有正确错误处理的简单方法。 要看的主要部分是正则表达式。
using System;
using System.Net;
using System.Text.RegularExpressions;
using System.Collections.Generic;
class Program
{
static void Main()
{
var map = new Map();
Console.WriteLine(map[300000011]);
}
}
public class Map: Dictionary<int, string>
{
public Map()
{
WebClient wc = new WebClient()
{
Proxy = null
};
string rawData = wc.DownloadString("<insert url with data in new format here>");
PopulateWith(rawData);
}
void PopulateWith(string rawText)
{
string pattern = @"ID: (?<id>\d*) NAME: (?<name>.*)";
foreach (Match match in Regex.Matches(rawText, pattern))
{
// TODO: add error handling here
int id = int.Parse( match.Groups["id"].Value );
string name = match.Groups["name"].Value;
this[id] = name;
}
}
}
答案 2 :(得分:0)
gcnew
更改为new
将数组转换为string[]
public void CacheMaps()
)ref class
更改为static class
nullptr
更改为null
catch(...)
更改为catch
using namespace
移至文件的最顶部,并将范围解析运算符(::)替换为点。那应该是关于它的。
答案 3 :(得分:-1)
最简单的方法是在ID:30000和名称:Andrew Island之间进行标记分隔,并删除ID和名称
30000, Andrew Island
然后在您的C#代码中,您将创建一个名为
的自定义类public class SomeDTO {
public long ID{get; set;}
public string Name {get; set;}
}
接下来你将创建一个SomeDTO类型的新List:
var List = new List<SomeDTO>();
然后当您解析txt文件时,获取文件阅读器并逐行读取每行,确保您有一个令牌分隔符,用逗号分隔将两个值分开。
现在您只需将其添加到新列表
即可var tempId = line[1];
var tempName = line[2];
List.Add(new SomeDTO{ ID = tempId, Name = tempName});
现在您已将整个列表存储在内存中,您可以进行大量搜索,找不到所需的所有内容,并重复使用它,因为您已经构建了列表。
var first = List.Where(x => x.Name.Equals("Andrew Island")).FirstOrDefault();