2011-03-03 9 views
9

में Tstringlist की लंबाई की जांच कैसे करें मैं यही करने की कोशिश कर रहा हूं। मेरे पास एक नाम के लिए एक Tstringlist है। यदि नाम डीओई, जॉन, एनएमआई प्रारूप में है, तो मैं इसे नाम को 3 अलग-अलग तारों में विभाजित करना चाहता हूं।
लेकिन समस्या यह है कि क्या कोई मध्य प्रारंभिक नहीं है। या पहला नाम। जैसे यह सिर्फ डीओई हो सकता है, तो आखिरी दो पंक्तियां सीमा से बाहर हैं। और कार्यक्रम दुर्घटनाग्रस्त हो जाता है। सबसे अच्छा समाधान क्या है?डेल्फी

var ptname, physname: Tstringlist; 

if pos(',',Msg.Grp2[0].ObsReq[0].OrderingProviderFamilyName) > 0 then // split it if it has a comma 
begin 
    physname := TstringList.Create; 
    physname.CommaText := Msg.Grp2[0].ObsReq[0].OrderingProviderFamilyName; 
    Parameters.ParamByName('@OrderingLastNameOBR16').Value := physname[0]; 
    Parameters.ParamByName('@OrderingFirstNameOBR16').Value := physname[1]; 
    Parameters.ParamByName('@OrderingMiddleNameOBR16').Value := physname[2]; 
    physname.Free; 
end 
+0

डेविड का अच्छा समाधान एक तरफ, यह पूरी तरह से आबादी वाले सीएसवी के लिए क्लीनर होगा। यदि कोई तत्व गुम है, तो आपके पास कॉमा है। पूर्व: डीओई DOE होगा, फिर भी यह चारों ओर गड़बड़ किए बिना ठीक है। –

+3

@ क्रिस: डेविड? डेविड कौन? Harumph! : पी – dthorpe

उत्तर

14

उपयोग TStringList.Count

physname := TstringList.Create; 
    physname.CommaText := Msg.Grp2[0].ObsReq[0].OrderingProviderFamilyName; 
    if physname.Count > 0 then 
    begin 
    Parameters.ParamByName('@OrderingLastNameOBR16').Value := physname[0]; 
    if physname.Count > 1 then 
    begin 
     Parameters.ParamByName('@OrderingFirstNameOBR16').Value := physname[1]; 
     if physname.Count > 2 then 
     begin 
     Parameters.ParamByName('@OrderingMiddleNameOBR16').Value := physname[2]; 
     end; 
    end; 
    end; 
    physname.Free; 
+0

यह काम करता है, धन्यवाद! – Rob