2014-05-23 5 views
6

मैं इनो सेटअप में स्ट्रिंग कैसे विभाजित कर सकता हूं?
क्या स्ट्रिंग को विभाजित करने के लिए इनो सेटअप में कोई विशेष कार्य है?इनो सेटअप में स्ट्रिंग को कैसे विभाजित करें

मैं स्ट्रिंग '11.2.0.16' से निम्नलिखित प्राप्त करना चाहते हैं:

tokens: array of string = ('11', '0', '2', '16'); 

अग्रिम धन्यवाद!

+1

आप शायद ऐसा कर सकते हैं, लेकिन यह फायदेमंद हो सकता है अगर आपने समझाया कि आप ऐसा क्यों करना चाहते हैं; ऐसा लगता है कि आप किसी संस्करण संख्या के साथ कुछ करने का प्रयास कर रहे हैं, और जो भी आप करने का प्रयास कर रहे हैं उसके आधार पर ऐसा करने का एक आसान तरीका हो सकता है। यह निश्चित रूप से आपके द्वारा पोस्ट किए गए वाक्यविन्यास जैसी किसी भी चीज़ का उपयोग नहीं करेगा, जो InnoSetup पास्कल स्क्रिप्ट से अधिक सी/सी # है। –

+0

उस स्ट्रिंग को "विभाजित" करने का कोई तरीका नहीं है। इसे पार्स किया जाना चाहिए। लेकिन उपरोक्त टिप्पणी में @ केन पूछने के उद्देश्य से बेहतर तरीके से व्याख्या करने का प्रयास करें। – TLama

+0

@TLama: ठीक है, आप एक फ़ंक्शन लिख सकते हैं जिसने इसे पार्स किया और "विभाजन" स्ट्रिंग वापस कर दी, और इसे "स्प्लिट" नाम दिया। :-) –

उत्तर

8

मैं एक ही बात आज की तलाश में किया गया है ...

यह एक Inno सेटअप स्क्रिप्ट के बारे में ठीक काम करता है। इस स्क्रिप्ट को प्रक्रिया/फ़ंक्शन से पहले अपनी स्क्रिप्ट के अंदर पेस्ट करें जो इस "विभाजन" प्रक्रिया को कॉल करेगा।

तुम भी एक समारोह पर इस संशोधित कर सकते हैं, और यदि आप चाहें ...

procedure Explode(var Dest: TArrayOfString; Text: String; Separator: String); 
var 
    i, p: Integer; 
begin 
    i := 0; 
    repeat 
    SetArrayLength(Dest, i+1); 
    p := Pos(Separator,Text); 
    if p > 0 then begin 
     Dest[i] := Copy(Text, 1, p-1); 
     Text := Copy(Text, p + Length(Separator), Length(Text)); 
     i := i + 1; 
    end else begin 
     Dest[i] := Text; 
     Text := ''; 
    end; 
    until Length(Text)=0; 
end; 

procedure Whatever(); 
var 
    str: String; 
    strArray: TArrayOfString; 
    i: Integer; 
begin 
    Explode(strArray,str,'.'); 
    for i:=0 to GetArrayLength(strArray)-1 do begin 
    //do something 
    end; 
end; 

here

+0

जिज्ञासा से बाहर, ['here's'] (http://pastebin.com/STcQLfKR) मुश्किल विकल्प जो लाइन विभाजित करके सभी विभाजक वर्णों को प्रतिस्थापित करता है और ऐसे पाठ को एक स्ट्रिंग सूची में लोड करता है जो स्वचालित रूप से वस्तुओं में मूल्यों को तोड़ देता है। लेकिन वैसे भी, यह सब नहीं है। आपको उस स्ट्रिंग को मूल स्ट्रिंग से पार्स करने के लिए स्ट्रिप करने की आवश्यकता है, और आखिरकार मानों से उद्धरण हटाएं और उन मानों को एक बिंदीदार स्ट्रिंग में प्रारूपित करें (इसलिए "विभाजन" के बारे में मेरी प्रारंभिक टिप्पणी)। – TLama

5

से लिया किसी को भी कि समारोह प्रारूप मैं @ cezar-lamann से ऊपर संशोधित किया है पसंद करते हैं के लिए :

function StrSplit(Text: String; Separator: String): TArrayOfString; 
var 
    i, p: Integer; 
    Dest: TArrayOfString; 
begin 
    i := 0; 
    repeat 
    SetArrayLength(Dest, i+1); 
    p := Pos(Separator,Text); 
    if p > 0 then begin 
     Dest[i] := Copy(Text, 1, p-1); 
     Text := Copy(Text, p + Length(Separator), Length(Text)); 
     i := i + 1; 
    end else begin 
     Dest[i] := Text; 
     Text := ''; 
    end; 
    until Length(Text)=0; 
    Result := Dest 
end; 
संबंधित मुद्दे