2009-02-23 14 views
8

क्या किसी के पास यूनिकोड-जागरूक स्ट्रिंग प्रोग्राम के लिए कोड नमूना है? प्रोग्रामिंग भाषा कोई फर्क नहीं पड़ता। मुझे ऐसा कुछ चाहिए जो अनिवार्य रूप से यूनिक्स कमांड "स्ट्रिंग्स" जैसा ही काम करता है, लेकिन यह यूनिकोड टेक्स्ट (यूटीएफ -16 या यूटीएफ -8) पर भी काम करता है, जो अंग्रेजी भाषा के पात्रों और विराम चिह्नों के रन खींचता है। (मुझे केवल अंग्रेजी वर्णों की परवाह है, कोई अन्य वर्णमाला नहीं)।यूनिकोड-जागरूक स्ट्रिंग्स (1) प्रोग्राम

धन्यवाद!

+1

केवल अंग्रेज़ी और यूटीएफ -8 के लिए, तार (1) पहले से ही ठीक होना चाहिए। – mouviciel

+0

यदि भाषा कोई फर्क नहीं पड़ता तो आप तारों की उपयोगिता के स्रोत को क्यों नहीं देखते हैं? –

उत्तर

8

क्या आप बस इसका इस्तेमाल करना चाहते हैं, या आप किसी कारण से कोड पर जोर देते हैं?

मेरे डेबियन सिस्टम पर, ऐसा लगता है कि strings कमांड बॉक्स से बाहर कर सकता है। मैनपेज से बहिष्कार देखें:

--encoding=encoding 
     Select the character encoding of the strings that are to be found. Possible values for encoding are: s = single-7-bit-byte characters (ASCII, ISO 8859, 
     etc., default), S = single-8-bit-byte characters, b = 16-bit bigendian, l = 16-bit littleendian, B = 32-bit bigendian, L = 32-bit littleendian. Useful 
     for finding wide character strings. 

संपादित करें: ठीक है। मुझे सी # नहीं पता है, इसलिए यह थोड़ा बालों वाला हो सकता है, लेकिन मूल रूप से, आपको वैकल्पिक शून्य और अंग्रेजी वर्णों के अनुक्रमों की खोज करने की आवश्यकता है।

byte b; 
int i=0; 
while(!endOfInput()) { 
    b=getNextByte(); 
LoopBegin: 
    if(!isEnglish(b)) { 
    if(i>0) // report successful match of length i 
    i=0; 
    continue; 
    } 
    if(endOfInput()) break; 
    if((b=getNextByte())!=0) 
    goto LoopBegin; 
    i++; // found another character 
} 

यह छोटे-एंडियन के लिए काम करना चाहिए।

+0

मुझे कोड चाहिए ... मुझे इसे एक सिस्टम में शामिल करने की आवश्यकता है जिसे मैं लिख रहा हूं (सी # में, यदि यह मायने रखता है)। – Evan

+0

धन्यवाद, बिल्कुल मुझे क्या चाहिए। बहुत स्पष्ट, अब मैं इसके बारे में सोचता हूं; बस नल बाइट्स छोड़ें। – Evan

1

मुझे एक ही समस्या थी और "strings -e ..." की कोशिश की लेकिन मुझे बस चौड़ाई चौकोर चार्ज एन्कोडिंग के लिए विकल्प मिल गए। (यूटीएफ -8 एन्कोडिंग चर चौड़ाई है)।

एस्सी के बाहर डिफ़ॉल्ट वर्णों से Remeber thar अतिरिक्त strings विकल्प की आवश्यकता है। इसमें लगभग सभी गैर अंग्रेजी भाषा तार शामिल हैं।

फिर भी "-e S" (सिंगल 8 बिट्स चार्स) आउटपुट में यूटीएफ -8 वर्ण शामिल हैं।

मैंने एक बहुत ही सरल (राय-एड) पर्ल स्क्रिप्ट लिखी है जो इनपुट फ़ाइलों में "strings -e S ... | iconv ..." लागू करती है।

मुझे विश्वास है कि विशिष्ट प्रतिबंधों के लिए इसे ट्यून करना आसान है। उपयोग: utf8strings [options] file*

#!/usr/bin/perl -s 

our ($all,$windows,$enc); ## use -all ignore the "3 letters word" restriction 
use strict; 
use utf8::all; 

$enc = "ms-ansi" if  $windows; ## 
$enc = "utf8" unless $enc ; ## defaul encoding=utf8 
my $iconv = "iconv -c -f $enc -t utf8 |"; 

for (@ARGV){ s/(.*)/strings -e S '$1'| $iconv/;} 

my $word=qr/[a-zçáéíóúâêôàèìòùüãõ]{3}/i; # adapt this to your case 

while(<>){ 
    # next if /regular expressions for common garbage/; 
    print if ($all or /$word/); 
} 

कुछ स्थितियों में, इस दृष्टिकोण के लिए कुछ अतिरिक्त कचरा पैदा करते हैं।

संबंधित मुद्दे