читать значения из файла - PullRequest
       0

читать значения из файла

2 голосов
/ 15 сентября 2010

Я изучаю программирование на C #. Я пытаюсь прочитать, например: идентификатор пациента или имя пациента из тегов dicom. Я пытался так:

    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 = последовательность.
Как я могу прочитать, что такое идентификатор пациента?

Ответы [ 3 ]

3 голосов
/ 15 сентября 2010

Мне не ясно, что именно вы делаете, но опубликованный вами код явно не сработает. Проблема в том, что вы объявляете локальную переменную с именем var, присваиваете ей значение, а затем сразу же это значение выходит из области видимости. Фактически код ничего не делает.

Вам также не нужно сначала назначать нуль, а затем переназначать. Это более простой способ написания кода:

foreach (DataElement el in sq)
{
    string var = elementy.Value.ToString();
}

Я бы также посоветовал вам избегать использования var в качестве имени переменной. Он ничего не говорит о том, что на самом деле содержит переменная, и его легко спутать с контекстным ключевым словом var.

0 голосов
/ 15 сентября 2010

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;
        }
    }
}

Это должно установить переменные tag, op, val_rep и war для вас, когда он найдет тег ID пациента, а затем выйдет из foreach.

Как я уже упоминал здесь несколько раз, я не очень хорошо разбираюсь в библиотеке openDicom, но если предположить, что остальная часть вашего кода верна, это должно дать вам то, что вы хотите. Документация openDICOM для свойств Group и Element класса Tag выглядит несколько странно: «Элемент представляет собой шестнадцатеричное строковое значение формата« eeee ».», Поэтому я предполагаю, что сравниваемые значения должны быть в этом формате, но есть небольшая вероятность того, что форматирование не будет правильным.

Я скажу, что если вы только изучаете C #, и DICOM не является чем-то, что вы вынуждены делать, найдите что-то более легкое для начала, потому что изучение использования стандарта DICOM может быть по меньшей мере настолько запутанным, как изучение нового языка программирования и одновременное их комбинирование - это то, что я бы никому не рекомендовал.

0 голосов
/ 15 сентября 2010

Ну, работать не над чем, но попробуйте так:

List<string> nameList = new List<string>();
foreach (DataElement el in sq) 
{ 
   nameList.Add(el.Value as string); 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...