Evgenios1 Δημοσ. 14 Αυγούστου 2009 Δημοσ. 14 Αυγούστου 2009 Γεια και χαρα. (.net c#) Εστω ο,τι εχω ενα αρχειο με ενα format του τυπου >$elementName@Value? (text οχι binary) Εγω θελω να βαλω μεσα στο @ αλλο ενα element πχ >$persons@$goodperson@mplampla?$badperson@mplampla?? πως θα το διαβασω; Για να διαβασω πχ αυτο >$personId@2?$name@takis?$lname@paliotakis? εχω κανει αυτο >[color="#0000ff"][b]using[/b][/color] System; [color="#0000ff"][b]using[/b][/color] System.Collections.Generic; [color="#0000ff"][b]using[/b][/color] System.Linq; [color="#0000ff"][b]using[/b][/color] System.Text; [color="#0000ff"][b]using[/b][/color] System.Text.RegularExpressions; [color="#0000ff"][b]namespace[/b][/color] ConsoleApplication1 { [color="#0000ff"][b]public[/b][/color] [color="#0000ff"][b]class[/b][/color] Person { [TextSerializer(Tag = [color="#a31515"]"name"[/color])] [color="#0000ff"][b]public[/b][/color] [color="#8000ff"]string[/color] FirsName; [TextSerializer(Tag = [color="#a31515"]"lname"[/color])] [color="#0000ff"][b]public[/b][/color] [color="#8000ff"]string[/color] LastName; } [color="#0000ff"][b]class[/b][/color] Program { [color="#0000ff"][b]static[/b][/color] [color="#0000ff"][b]void[/b][/color] Main([color="#8000ff"]string[/color][] args) { TextSerializer personSer1 = [color="#0000ff"][b]new[/b][/color] TextSerializer([color="#0000ff"][b]typeof[/b][/color](Person)); Person person = personSer1.Deserializer(mainsource) [color="#0000ff"][b]as[/b][/color] Person; [color="#2b91af"]Console[/color].WriteLine([color="#a31515"]"FName:{0}\nLName:{1}"[/color],person.FirsName,person.LastName); [color="#2b91af"]Console[/color].Read(); } } } >[color="#0000ff"][b]using[/b][/color] System; [color="#0000ff"][b]using[/b][/color] System.Collections.Generic; [color="#0000ff"][b]using[/b][/color] System.Linq; [color="#0000ff"][b]using[/b][/color] System.Text; [color="#0000ff"][b]namespace[/b][/color] ConsoleApplication1 { [color="#0000ff"][b]class[/b][/color] TextSerializer : TextSomeFormat { [color="#0000ff"][b]private[/b][/color] [color="#2b91af"]Type[/color] type; [color="#0000ff"][b]public[/b][/color] TextSerializer([color="#2b91af"]Type[/color] type) { [color="#0000ff"][b]this[/b][/color].type = type; } [color="#0000ff"][b]public[/b][/color] [color="#8000ff"]object[/color] Deserializer([color="#8000ff"]string[/color] source) { [color="#8000ff"]object[/color] obj = [color="#2b91af"]Activator[/color].CreateInstance(type); [color="#0000ff"][b]foreach[/b][/color] ([color="#0000ff"][b]var[/b][/color] fields [color="#0000ff"][b]in[/b][/color] type.GetFields()) { [color="#0000ff"][b]var[/b][/color] att = fields.GetCustomAttributes([color="#0000ff"][b]true[/b][/color]).[color="#2b91af"]Single[/color]() [color="#0000ff"][b]as[/b][/color] TextSerializerAttribute; type.GetField(fields.Name).SetValue(obj, GetValue(GetTags(source), att.Tag)); } [color="#0000ff"][b]return[/b][/color] obj; } [color="#0000ff"][b]public[/b][/color] [color="#8000ff"]string[/color] Serializer([color="#8000ff"]object[/color] obj) { [color="#8000ff"]string[/color] source = [color="#a31515"]""[/color]; [color="#0000ff"][b]foreach[/b][/color] ([color="#0000ff"][b]var[/b][/color] field [color="#0000ff"][b]in[/b][/color] type.GetFields()) { [color="#0000ff"][b]var[/b][/color] att = field.GetCustomAttributes([color="#0000ff"][b]true[/b][/color]).[color="#2b91af"]Single[/color]() [color="#0000ff"][b]as[/b][/color] TextSerializerAttribute; source = SetTag(att.Tag, type.GetField(field.Name).GetValue(obj).ToString(), source); } [color="#0000ff"][b]return[/b][/color] source; } } } TextSomeFormat >[color="#0000ff"][b]using[/b][/color] System; [color="#0000ff"][b]using[/b][/color] System.Collections.Generic; [color="#0000ff"][b]using[/b][/color] System.Linq; [color="#0000ff"][b]namespace[/b][/color] ConsoleApplication1 { [color="#0000ff"][b]class[/b][/color] TextSomeFormat { [color="#0000ff"][b]protected[/b][/color] [color="#8000ff"]string[/color] SetTag([color="#8000ff"]string[/color] tagname, [color="#8000ff"]string[/color] tagvalue, [color="#8000ff"]string[/color] source) { source += [color="#8000ff"]string[/color].[color="#2b91af"]Format[/color]([color="#a31515"]"${0}@{1}?"[/color], tagname, tagvalue); [color="#0000ff"][b]return[/b][/color] source; } [color="#0000ff"][b]protected[/b][/color] [color="#8000ff"]object[/color] GetValue([color="#2b91af"]IEnumerable[/color]<[color="#8000ff"]string[/color]> tags, [color="#8000ff"]string[/color] name) { [color="#0000ff"][b]foreach[/b][/color] ([color="#0000ff"][b]var[/b][/color] item [color="#0000ff"][b]in[/b][/color] tags) [color="#0000ff"][b]if[/b][/color] ([color="#0000ff"][b]new[/b][/color] [color="#8000ff"]string[/color](GetTagName(item).ToArray()) == name) [color="#0000ff"][b]return[/b][/color] [color="#0000ff"][b]new[/b][/color] [color="#8000ff"]string[/color](GetValue(item).ToArray()); [color="#0000ff"][b]return[/b][/color] [color="#0000ff"][b]null[/b][/color]; } [color="#0000ff"][b]protected[/b][/color] [color="#2b91af"]IEnumerable[/color]<[color="#8000ff"]string[/color]> GetTags([color="#8000ff"]string[/color] source) { [color="#8000ff"]int[/color] idxs = source.IndexOf('$'); [color="#8000ff"]int[/color] idxe = source.IndexOf('?'); [color="#8000ff"]bool[/color] flag = [color="#0000ff"][b]true[/b][/color]; [color="#0000ff"][b]while[/b][/color] (flag) { [color="#0000ff"][b]yield[/b][/color] [color="#0000ff"][b]return[/b][/color] source.Substring(idxs, idxe - idxs); [color="#0000ff"][b]if[/b][/color] (-[color="#ff8000"]1[/color] == source.IndexOf('$', idxs + [color="#ff8000"]1[/color])) flag = [color="#0000ff"][b]false[/b][/color]; [color="#0000ff"][b]else[/b][/color] { idxs = source.IndexOf('$', idxs + [color="#ff8000"]1[/color]); idxe = source.IndexOf('?', idxe + [color="#ff8000"]1[/color]); } } } [color="#0000ff"][b]private[/b][/color] [color="#2b91af"]IEnumerable[/color]<[color="#8000ff"]char[/color]> GetTagName([color="#8000ff"]string[/color] source) { [color="#0000ff"][b]for[/b][/color] ([color="#8000ff"]int[/color] i = source.IndexOf('$') + [color="#ff8000"]1[/color]; i < source.Length; i++) [color="#0000ff"][b]if[/b][/color] (source[i] == '@') [color="#0000ff"][b]break[/b][/color]; [color="#0000ff"][b]else[/b][/color] [color="#0000ff"][b]yield[/b][/color] [color="#0000ff"][b]return[/b][/color] source[i]; } [color="#0000ff"][b]private[/b][/color] [color="#2b91af"]IEnumerable[/color]<[color="#8000ff"]char[/color]> GetValue([color="#8000ff"]string[/color] source) { [color="#0000ff"][b]for[/b][/color] ([color="#8000ff"]int[/color] i = source.IndexOf('@') + [color="#ff8000"]1[/color]; i < source.Length; i++) [color="#0000ff"][b]if[/b][/color] (source[i] == '?') [color="#0000ff"][b]break[/b][/color]; [color="#0000ff"][b]else[/b][/color] [color="#0000ff"][b]yield[/b][/color] [color="#0000ff"][b]return[/b][/color] source[i]; } } }
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.