Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# HL7短信,如何查找具体字段信息 MSH^ ~\&A | B | C | D | 201402141402 | ORM^O01 | 33987 | D | 2.3 皮德| 1 | 99989392 | UHCMCDO | 2 | | 19810101 | M | | | 5678糖果藤巷|欧几里得|哦^ 44117 |美国|(212)353-6048 |(212)323 6078 | | | | | 99576837 |非希斯潘| 12月12日,1号方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方三十一 12月12日1 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 124m GT1 | 1 | | UHCMCDO |二| | | | | 5678糖果藤巷| ^欧几里得^ OH ^ 44117 |(212)353-6048 | | 19810101 | | | 兽人(西北部)2014021410256 非妇科细胞学 DG1 | 1 | I9 | V70.0 |常规体检-V70.0 OBX | 1 | TX | PTH | U场地1 ^场地A | 1 |左| F||||||| OBX | 2 | TX | PTH |规格1 |样本A | C-FNA |细针抽吸| F|||||||_C#_Hl7 - Fatal编程技术网

C# HL7短信,如何查找具体字段信息 MSH^ ~\&A | B | C | D | 201402141402 | ORM^O01 | 33987 | D | 2.3 皮德| 1 | 99989392 | UHCMCDO | 2 | | 19810101 | M | | | 5678糖果藤巷|欧几里得|哦^ 44117 |美国|(212)353-6048 |(212)323 6078 | | | | | 99576837 |非希斯潘| 12月12日,1号方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方三十一 12月12日1 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 124m GT1 | 1 | | UHCMCDO |二| | | | | 5678糖果藤巷| ^欧几里得^ OH ^ 44117 |(212)353-6048 | | 19810101 | | | 兽人(西北部)2014021410256 非妇科细胞学 DG1 | 1 | I9 | V70.0 |常规体检-V70.0 OBX | 1 | TX | PTH | U场地1 ^场地A | 1 |左| F||||||| OBX | 2 | TX | PTH |规格1 |样本A | C-FNA |细针抽吸| F|||||||

C# HL7短信,如何查找具体字段信息 MSH^ ~\&A | B | C | D | 201402141402 | ORM^O01 | 33987 | D | 2.3 皮德| 1 | 99989392 | UHCMCDO | 2 | | 19810101 | M | | | 5678糖果藤巷|欧几里得|哦^ 44117 |美国|(212)353-6048 |(212)323 6078 | | | | | 99576837 |非希斯潘| 12月12日,1号方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方三十一 12月12日1 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 124m GT1 | 1 | | UHCMCDO |二| | | | | 5678糖果藤巷| ^欧几里得^ OH ^ 44117 |(212)353-6048 | | 19810101 | | | 兽人(西北部)2014021410256 非妇科细胞学 DG1 | 1 | I9 | V70.0 |常规体检-V70.0 OBX | 1 | TX | PTH | U场地1 ^场地A | 1 |左| F||||||| OBX | 2 | TX | PTH |规格1 |样本A | C-FNA |细针抽吸| F|||||||,c#,hl7,C#,Hl7,我有一个HL7文件,我需要进入PID段以获取患者姓名“UHCMCDO^TWO^^^^^^^^^^^,然后我需要遍历到OBR段以获取医嘱ID 36358,然后提交到数据库表。 我很累地找到PID,然后转到第5个字段获取患者姓名,但无法找到 我知道如何按特定值搜索,而不是动态更改值,但我有100个文件,我需要获取每个患者的姓名和医嘱id才能提取报告。如果文件格式始终相同,您可以使用正则表达式获取要查找的数据 string name = Regex.Match(inputString,@"^PID([

我有一个HL7文件,我需要进入PID段以获取患者姓名“UHCMCDO^TWO^^^^^^^^^^^,然后我需要遍历到OBR段以获取医嘱ID 36358,然后提交到数据库表。 我很累地找到PID,然后转到第5个字段获取患者姓名,但无法找到


我知道如何按特定值搜索,而不是动态更改值,但我有100个文件,我需要获取每个患者的姓名和医嘱id才能提取报告。

如果文件格式始终相同,您可以使用正则表达式获取要查找的数据

string name = Regex.Match(inputString,@"^PID([\d\|]*)\|\|(.*?)\|\|").Groups[2].Value;
string obrId = Regex.Match(inputString,@"OBR\|[\d]*\|(\d*)\|").Groups[1].Value;
第一个是在PID之后寻找双管道之间的第一个匹配, 第二个是寻找管道之间的第二个数字

但是,如果文件的格式不一致,这将不起作用

编辑: 下面是我在ideone.com()上运行的一段代码,使用您的示例作为“原始”字符串

输出:

UHCMCDO^TWO^^^^
36358

如果文件格式始终相同,则可以使用正则表达式获取要查找的数据

string name = Regex.Match(inputString,@"^PID([\d\|]*)\|\|(.*?)\|\|").Groups[2].Value;
string obrId = Regex.Match(inputString,@"OBR\|[\d]*\|(\d*)\|").Groups[1].Value;
第一个是在PID之后寻找双管道之间的第一个匹配, 第二个是寻找管道之间的第二个数字

但是,如果文件的格式不一致,这将不起作用

编辑: 下面是我在ideone.com()上运行的一段代码,使用您的示例作为“原始”字符串

输出:

UHCMCDO^TWO^^^^
36358
与nHapi合作。 您将找到nHapi或使用nHapi的


您将找到nHapi或基于LINQ的解决方案-示例用法:

var fields = Field.Parse(hl7);
var name = fields.First(Field.Locate("PID:5")).Value;
var order = fields.First(Field.Locate("OBR:2")).Value;
其中字段类为:

public class Field
{
    public int SegmentSequence { get; set; }
    public string SegmentId { get; set; }
    public int FieldIndex { get; set; }
    public string Value { get; set; }

    public static IList<Field> Parse(string hl7, string segmentDelimiter = "\r")
    {
        if(hl7 == null) throw new ArgumentNullException("hl7");
        if(hl7.Length < 4) throw new ArgumentException("Invalid HL7 syntax.");
        hl7 = hl7.Replace("\r\n", "\r");
        try
        {
            var fieldDelimiter = hl7[3];
            return hl7.Split(new string[] { segmentDelimiter }, StringSplitOptions.None)
                .Where (s => s.Length > 0)
                .SelectMany(
                    (s, i) => s.Split(fieldDelimiter)
                                .Select(
                                    (f, j) => new Field { 
                                                    SegmentSequence = i, 
                                                    SegmentId = s.Substring(0,3), 
                                                    FieldIndex = i==0 ? j+1 : j, 
                                                    Value = f
                                                }
                                        )
                ).Where(o => !(o.FieldIndex == 0) && !(o.SegmentSequence==0 && o.FieldIndex==1))
                .ToList();
        }
        catch
        {
            throw new ArgumentException("Invalid HL7 syntax.");
        }
    }

    public static Func<Field, bool> Locate(string descriptor)
    {
        if(descriptor == null) throw new ArgumentNullException(descriptor);
        Action throwSyntaxException = () => {
            var msg = string.Format("Invalid descriptor syntax: '{0}'", descriptor);
            throw new InvalidOperationException(msg);
        };

        var elements = descriptor.Split(':');
        if(elements.Length != 2) throwSyntaxException();

        int ndx;
        if(!int.TryParse(elements[1], out ndx)) throwSyntaxException();

        return (field) => field.SegmentId == elements[0] && field.FieldIndex == ndx;
    }
}
公共类字段
{
公共整数段序列{get;set;}
公共字符串段ID{get;set;}
公共int字段索引{get;set;}
公共字符串值{get;set;}
公共静态IList解析(字符串hl7,字符串分段分隔符=“\r”)
{
如果(hl7==null)抛出新的ArgumentNullException(“hl7”);
如果(hl7.Length<4)抛出新的ArgumentException(“无效的hl7语法”);
hl7=hl7。替换(“\r\n”和“\r”);
尝试
{
var fieldDelimiter=hl7[3];
返回hl7.Split(新字符串[]{segmentDelimiter},StringSplitOptions.None)
.其中(s=>s.长度>0)
.SelectMany(
(s,i)=>s.Split(字段分隔符)
.选择(
(f,j)=>新字段{
分段顺序=i,
SegmentId=s.子串(0,3),
FieldIndex=i==0?j+1:j,
值=f
}
)
)其中(o=>!(o.FieldIndex==0)和&!(o.SegmentSequence==0和o.FieldIndex==1))
.ToList();
}
抓住
{
抛出新的ArgumentException(“无效的HL7语法”);
}
}
公共静态函数定位(字符串描述符)
{
如果(描述符==null)抛出新的ArgumentNullException(描述符);
动作throwSyntaxException=()=>{
var msg=string.Format(“无效的描述符语法:{0}”,描述符);
抛出新的InvalidOperationException(消息);
};
var elements=descriptor.Split(“:”);
if(elements.Length!=2)throwSyntaxException();
int-ndx;
if(!int.TryParse(元素[1],out ndx))throwSyntaxException();
return(field)=>field.SegmentId==elements[0]&&field.FieldIndex==ndx;
}
}

基于LINQ的解决方案-示例用法:

var fields = Field.Parse(hl7);
var name = fields.First(Field.Locate("PID:5")).Value;
var order = fields.First(Field.Locate("OBR:2")).Value;
其中字段类为:

public class Field
{
    public int SegmentSequence { get; set; }
    public string SegmentId { get; set; }
    public int FieldIndex { get; set; }
    public string Value { get; set; }

    public static IList<Field> Parse(string hl7, string segmentDelimiter = "\r")
    {
        if(hl7 == null) throw new ArgumentNullException("hl7");
        if(hl7.Length < 4) throw new ArgumentException("Invalid HL7 syntax.");
        hl7 = hl7.Replace("\r\n", "\r");
        try
        {
            var fieldDelimiter = hl7[3];
            return hl7.Split(new string[] { segmentDelimiter }, StringSplitOptions.None)
                .Where (s => s.Length > 0)
                .SelectMany(
                    (s, i) => s.Split(fieldDelimiter)
                                .Select(
                                    (f, j) => new Field { 
                                                    SegmentSequence = i, 
                                                    SegmentId = s.Substring(0,3), 
                                                    FieldIndex = i==0 ? j+1 : j, 
                                                    Value = f
                                                }
                                        )
                ).Where(o => !(o.FieldIndex == 0) && !(o.SegmentSequence==0 && o.FieldIndex==1))
                .ToList();
        }
        catch
        {
            throw new ArgumentException("Invalid HL7 syntax.");
        }
    }

    public static Func<Field, bool> Locate(string descriptor)
    {
        if(descriptor == null) throw new ArgumentNullException(descriptor);
        Action throwSyntaxException = () => {
            var msg = string.Format("Invalid descriptor syntax: '{0}'", descriptor);
            throw new InvalidOperationException(msg);
        };

        var elements = descriptor.Split(':');
        if(elements.Length != 2) throwSyntaxException();

        int ndx;
        if(!int.TryParse(elements[1], out ndx)) throwSyntaxException();

        return (field) => field.SegmentId == elements[0] && field.FieldIndex == ndx;
    }
}
公共类字段
{
公共整数段序列{get;set;}
公共字符串段ID{get;set;}
公共int字段索引{get;set;}
公共字符串值{get;set;}
公共静态IList解析(字符串hl7,字符串分段分隔符=“\r”)
{
如果(hl7==null)抛出新的ArgumentNullException(“hl7”);
如果(hl7.Length<4)抛出新的ArgumentException(“无效的hl7语法”);
hl7=hl7。替换(“\r\n”和“\r”);
尝试
{
var fieldDelimiter=hl7[3];
返回hl7.Split(新字符串[]{segmentDelimiter},StringSplitOptions.None)
.其中(s=>s.长度>0)
.SelectMany(
(s,i)=>s.Split(字段分隔符)
.选择(
(f,j)=>新字段{
分段顺序=i,
SegmentId=s.子串(0,3),
FieldIndex=i==0?j+1:j,
值=f
}
)
).其中(o=>!(o.字段