我有一个列表(在txt文件中),看起来像这个字段:description
let receivedQ = json["q"].stringValue
self.q = receivedQ
print(self.q)
像101,102这样的数字是messagetype。
如果我在该列表中有一个具有任何值的属性,我该如何编写代码,以获得它的等效描述。
示例:当字段具有值field20D.name = Reference
field20[101].name = Sender's Reference
field20[102].name = File Reference
field20[102_STP].name = File Reference
field20[103].name = Sender's Reference
以构建字符串"20D"
答案 0 :(得分:0)
这是一个很好的课程,可以做你上面所说的。
using System;
using System.Collections.Generic;
namespace TestConsoleProject
{
public class WeirdLineFormatReader
{
public IEnumerable<Tuple<string, string>> ReadLines(IEnumerable<string> lines)
{
foreach (string line in lines)
{
// split each line on the =
string[] strLineArray = line.Split('=');
// get the first and second values of the split line
string field = strLineArray[0];
string value = strLineArray[1];
// remove the first field word
field = field.Substring("field".Length);
// remove the .name portion
field = field.Replace(".name", "");
// remove the surrounding white-space
field = field.Trim();
// remove all white space before/after the description
value = value.Trim();
yield return new Tuple<string, string>(field, value);
}
}
}
}
这是一个快速控制台项目,它将使用该类以您希望的方式将格式输出到控制台。
using System;
using System.IO;
namespace TestConsoleProject
{
class Program
{
static void Main(string[] args)
{
var lines = File.ReadLines(args[0]);
var reader = new WeirdLineFormatReader();
var tuples = reader.ReadLines(lines);
foreach (var tuple in tuples)
Console.WriteLine("{0} - {1}", tuple.Item1, tuple.Item2);
Console.ReadKey();
}
}
}
只是为了它的乐趣而且因为我怀疑你只是在一个更大的文本文件中向我们展示了几行;当您发现需要稍后向ReadLines(string [])方法添加更多代码时,这是单元测试的格式。
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System.Linq;
using TestConsoleProject;
namespace UnitTestProject
{
[TestClass]
public class UnitTest1
{
[TestMethod]
public void TestFormatter_WithoutBrackets()
{
// Arrange
var reader = new WeirdLineFormatReader();
string[] lines = {
"field20D.name = Reference"
};
// Act
var tuples = reader.ReadLines(lines).ToList();
// Assert
Assert.AreEqual(tuples[0].Item1, "20D", "Field 20D did not format correctly, Actual:" + tuples[0].Item1);
Assert.AreEqual(tuples[0].Item2, "Reference", "Field 20D's description did not format correctly, Actual:" + tuples[0].Item2);
}
[TestMethod]
public void TestFormatter_WithBrackets()
{
// Arrange
var reader = new WeirdLineFormatReader();
string[] lines = {
"field20[103].name = Sender's Reference"
};
// Act
var tuples = reader.ReadLines(lines).ToList();
// Assert
Assert.AreEqual(tuples[0].Item1, "20[103]", "Field 20[103] did not format correctly, Actual:" + tuples[0].Item1);
Assert.AreEqual(tuples[0].Item2, "Sender's Reference", "Field 20[103]'s description did not format correctly, Actual:" + tuples[0].Item2);
}
}
}
使用此单元测试项目,您可以快速为您发现的边缘情况编写新测试。修改ReadLines()
方法后,您可以重新运行所有单元测试,看看是否破坏了任何旧测试。
答案 1 :(得分:-1)
伪:
创建键值对的字典 在回车上分开 拆分等号(可以在值中有等号吗?) 正则表达式上半部分,以获取'field'和'.name'之间的所有内容,将其放入密钥中 将等分后面的分割放在值
中现在您可以按键引用您的词典:
entry = myDictionary["20D"];
return $"{entry.Key} - {entry.value}";