从文件中读取值

时间:2010-09-14 22:15:33

标签: c# parsing

我正在学习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。
 我怎样才能读出患者的身份?

3 个答案:

答案 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标签时为您设置tagopval_repwar变量,然后突破foreach。

正如我在这里多次提到的那样,我对openDicom库并不是非常精通,但假设你的其余代码是正确的,这应该可以得到你想要的东西。 Tag类的Group和Element属性的openDICOM文档有点奇怪,“Element是格式'eeee'的十六进制字符串值。”,所以我假设比较值应该是那种格式,但是有格式化不正确的可能性很小。

我会说,如果你只是学习C#,并且DICOM不是你被迫做的事情,那么找一些更容易开始的事情,因为学习使用DICOM标准可能至少令人困惑学习一种新的编程语言,并将它们同时组合在一起是我不建议任何人使用的。