我正在学习C#编程。我尝试阅读例如:来自dicom标签的患者ID或患者姓名。我试过这样:
string tag = "";
string op = "";
string val_rep = "";
string war = "";
if (DicomFile.IsDicomFile(f))
{
Sequence se = plik.GetJointDataSets().GetJointSubsequences();
foreach (DataElement el in se)
{
tag = el.Tag.ToString(); //tag group and element
op = el.VR.Tag.GetDictionaryEntry().Description;//tag description
val_rep = el.VR.ToString();//value representative
war = el.Value.ToString();//
}
}
为什么它不给我我想要的价值? sq = sequence。
我怎样才能读出患者的身份?
答案 0 :(得分:3)
我不清楚你在做什么,但你发布的代码显然不会起作用。问题是您声明了一个名为var
的局部变量,为其赋值,然后该值立即超出范围。实际上,代码无效。
您也不需要先指定null然后重新分配。这是编写代码的更简单方法:
foreach (DataElement el in sq)
{
string var = elementy.Value.ToString();
}
我还建议你尽量避免使用var
作为变量名。它没有说明变量实际包含的内容,而且很容易与var
上下文关键字混淆。
答案 1 :(得分:0)
嗯,没有多少工作,但尝试这样:
List<string> nameList = new List<string>();
foreach (DataElement el in sq)
{
nameList.Add(el.Value as string);
}
答案 2 :(得分:0)
患者ID的元素和组是0x0010,0x0020。您可以按原样遍历元素,并在找到要查找的值时停止迭代。
string tag = "";
string op = "";
string val_rep = "";
string war = "";
if (DicomFile.IsDicomFile(f))
{
Sequence se = plik.GetJointDataSets().GetJointSubsequences();
foreach (DataElement el in se)
{
if (el.Tag.Element == "0010" && el.Tag.Group == "0020")
{
tag = el.Tag.ToString(); //tag group and element
op = el.VR.Tag.GetDictionaryEntry().Description;//tag description
val_rep = el.VR.ToString();//value representative
war = el.Value.ToString();//
break;
}
}
}
这应该在找到患者ID标签时为您设置tag
,op
,val_rep
和war
变量,然后突破foreach。
正如我在这里多次提到的那样,我对openDicom库并不是非常精通,但假设你的其余代码是正确的,这应该可以得到你想要的东西。 Tag类的Group和Element属性的openDICOM文档有点奇怪,“Element是格式'eeee'的十六进制字符串值。”,所以我假设比较值应该是那种格式,但是有格式化不正确的可能性很小。
我会说,如果你只是学习C#,并且DICOM不是你被迫做的事情,那么找一些更容易开始的事情,因为学习使用DICOM标准可能至少令人困惑学习一种新的编程语言,并将它们同时组合在一起是我不建议任何人使用的。