【发布时间】:2019-08-31 18:03:06
【问题描述】:
我有以下 vCard 文本,我的目的是将文本解析为 vCard 对象列表
BEGIN:VCARD
VERSION:2.1
N:Kleit;Ali;;;
FN:Ali Kleit
TEL;CELL:70101010
END:VCARD
BEGIN:VCARD
VERSION:2.1
N:Kleit;Saeed;;;
FN:Saeed Kleit
TEL;CELL:03494949
END:VCARD
以下是我的代码
List<string> cards = new List<string>();
if (text != null)
{
while (text.Length != 0)
{
int idx_begin = text.IndexOf("BEGIN:VCARD");
if (idx_begin == -1)
break;
string endToken = "END:VCARD";
int idx_end = text.IndexOf(endToken);
if (idx_end == -1)
break;
string card = text.Substring(idx_begin, idx_end + endToken.Length);
text = text.Substring(idx_end + endToken.Length);
cards.Add(card);
}
}
接下来,使用Thought.vCards.vCard .NET Library 解析器解析每个找到的 vCard 文本
List<Thought.vCards.vCard> vCards = new List<Thought.vCards.vCard>();
List<string> failedStrings = new List<string>();
foreach (string card in cards)
{
using (TextReader sr = new StringReader(card))
{
var vCard = new Thought.vCards.vCard(sr);
if (vCard == null)
{
failedStrings.Add(card);
continue;
}
vCards.Add(vCard);
}
}
知道文本可能格式不正确,有没有更有效的方法来实现这一点?
【问题讨论】:
-
与其创建一个字符串列表,为什么不解析字符串值呢?
-
@juharr 我实际上拆分了我的代码以提高可读性以指出主要目的是(将文本的特定部分子串到对象列表中)
-
您可以将解析一个 vCard 的代码移动到一个方法中,并从从文件读取的代码中调用它,以保持拆分和可读性。