2010-11-01 9 views
7
  1. क्या किसी को भी वीबी 6 प्रारूप-तारों के लिए एक अच्छा संदर्भ पता है?
  2. क्या कोई भी वीबी 6 स्वरूपण तारों से .NET तारों के कनवर्टर के बारे में जानता है?

मैं .NET पर एक बड़े VB6 कोड बेस को पोर्ट करने पर काम कर रहा हूं। यह सॉफ्टवेयर का एक डेटाबेस केंद्रित टुकड़ा है, और डेटाबेस में स्वयं VB6 प्रारूप-स्ट्रिंग्स हैं जिन्हें बाद में लोड किया जाता है और डेटाबेस में अन्य डेटा प्रदर्शित करने के लिए उपयोग किया जाता है।क्या प्रोग्रामिंग रूप से VB6 स्वरूपण स्ट्रिंग को .NET स्वरूपण तारों में परिवर्तित करने का कोई तरीका है?

मेरा प्रश्न, जैसे this article, यह पोर्ट कैसे करें। हालांकि उस प्रश्न के लिए चुना गया उत्तर मेरी आवश्यकताओं के लिए पर्याप्त नहीं है। मैं विशेष रूप से पिछली संगतता के लिए डिजाइन की गई पुस्तकालयों पर असहज हूं जो मुझे विशेष रूप से बंदरगाह के लिए किराए पर लिया गया है।

+0

क्या डेटाबेस में स्वरूपित प्रारूप एक ज्ञात सेट हैं? यदि ऐसा है, तो आप उपकरण खोजने से उस सबसेट पर सरल डेटाबेस अपडेट करने के लिए स्क्रिप्ट लिखना बेहतर हो सकते हैं। आपको वैसे भी परिणामों को दोबारा जांचना होगा। –

+0

:- डी मेरी इच्छा है। पूरी तरह से पहले से ही सोचा-लेकिन यह एक ज्ञात सेट नहीं है (भले ही उनमें से अधिकतर * शून्य हैं)। दुर्भाग्यवश यह भी अर्थ का नकारात्मक पक्ष है कि हमारे हजारों उपयोगकर्ता लिम्बो में फंस सकते हैं ... इसके आसपास के तरीके हैं- लेकिन एक खोज और प्रतिस्थापन वास्तव में काम नहीं करेगा, नहीं। – Crisfole

उत्तर

14

प्रारूपण दिनचर्या जो वीबी 6 उपयोग वास्तव में ऑपरेटिंग सिस्टम में बनाई गई है। Oleaut32.dll, VarFormat() फ़ंक्शन। यह लगभग 15 वर्षों तक रहा है और इस पर निर्भर करता है कि इस पर कितना कोड निर्भर करता है। स्वरूपण स्ट्रिंग को .NET समग्र स्वरूपण स्ट्रिंग में अनुवाद करने का प्रयास करना एक निराशाजनक कार्य है। बस ओएस फ़ंक्शन का उपयोग करें।

यहां एक नमूना प्रोग्राम है जो ऐसा करता है, लिंक किए गए धागे से उदाहरण का उपयोग करते हुए बताया गया है:

using System; 
using System.Runtime.InteropServices; 

class Program { 
    static void Main(string[] args) { 
     Console.WriteLine(Vb6Format("hi there", ">")); 
     Console.WriteLine(Vb6Format("hI tHeRe", "<")); 
     Console.WriteLine(Vb6Format("hi there", ">[email protected]@@... not @@@@@")); 
     Console.ReadLine(); 
    } 

    public static string Vb6Format(object expr, string format) { 
     string result; 
     int hr = VarFormat(ref expr, format, 0, 0, 0, out result); 
     if (hr != 0) throw new COMException("Format error", hr); 
     return result; 
    } 
    [DllImport("oleaut32.dll", CharSet = CharSet.Unicode)] 
    private static extern int VarFormat(ref object expr, string format, int firstDay, int firstWeek, int flags, 
     [MarshalAs(UnmanagedType.BStr)] out string result); 
} 
+0

हंस, आप एक उद्धारक हैं। पृष्ठभूमि के लिए धन्यवाद। मुझे इतिहास का एहसास नहीं हुआ; इस धारणा के तहत था कि यह एक वीबी 6 प्रधान था। – Crisfole

+0

सरल और स्ली, मुझे यह पसंद है, +1 – smirkingman

0

आपकी सर्वश्रेष्ठ शर्त रूपांतरण लाइब्रेरी को स्वयं लिखना हो सकता है, लेकिन शायद वह उत्तर नहीं था जिसे आप प्राप्त करने की उम्मीद कर रहे थे।

+0

मेरे पास मेरी उम्मीदें बहुत अधिक नहीं थीं ... इसलिए मैंने वीबी 6 प्रारूप-स्ट्रिंग संसाधन के लिए भी पूछा, क्योंकि मुझे लगा कि मुझे इसे फिर से लिखना पड़ सकता है। – Crisfole

0

यहाँ कुछ एफ # कोड है कि के बहुमत तब्दील है पूर्व निर्धारित और कस्टम VB6 शैली सांख्यिक और करने के लिए दिनांक स्वरूप तार String.Format के लिए उपयुक्त कुछ। इसे आसानी से सी # या वीबी से आसानी से बुलाया जाता है।

open System 

module VB6Format = 

    /// Converts a VB6-style format string to something suitable for String.Format() 
    let Convert(vb6Format) = 
     if String.IsNullOrWhiteSpace(vb6Format) then "{0}" else 
     match if vb6Format.Length > 1 then vb6Format.ToUpperInvariant() else vb6Format with 
     // PREDEFINED NUMERIC: http://msdn.microsoft.com/en-us/library/y006s0cz(v=vs.71).aspx 
     | "GENERAL NUMBER" | "G"  -> "{0:G}" 
     | "g"       -> "{0:g}" 
     | "CURRENCY" | "C" | "c"  -> "{0:C}" 
     | "FIXED" | "F"    -> "{0:F}" 
     | "f"       -> "{0:f}" 
     | "STANDARD" | "N" | "n"  -> "{0:N}" 
     | "PERCENT" | "P" | "p"  -> "{0:P}" 
     | "SCIENTIFIC"     -> "{0:E2}" 
     | "E" | "e"     -> "{0:E6}" 
     | "D" | "d"     -> "{0:D}" 
     | "X" | "x"     -> "{0:X}" 
     | "YES/NO" | "ON/OFF"   // we can't support these 
     | "TRUE/FALSE"     -> "{0}" 
     // PREDEFINED DATE/TIME: http://msdn.microsoft.com/en-us/library/362btx8f(v=VS.71).aspx 
     | "GENERAL DATE" | "G"   -> "{0:G}" 
     | "LONG DATE" | "D"   -> "{0:D}" 
     | "MEDIUM DATE" 
     | "SHORT DATE" | "d"   -> "{0:d}" 
     | "LONG TIME" | "T"   -> "{0:T}" 
     | "MEDIUM TIME" 
     | "SHORT TIME" | "t"   -> "{0:t}" 
     | "M" | "m"     -> "{0:M}" 
     | "R" | "r"     -> "{0:R}" 
     | "s"       -> "{0:s}" 
     | "u"       -> "{0:u}" 
     | "U"       -> "{0:U}" 
     | "Y" | "y"     -> "{0:Y}" 
     // USER-DEFINED: http://msdn.microsoft.com/en-us/library/4fb56f4y(v=vs.71).aspx 
     //    http://msdn.microsoft.com/en-us/library/73ctwf33(v=VS.71).aspx 
     // The user-defined format strings translate more-or-less exactly, so we're just going to use them. 
     | _       -> sprintf "{0:%s}" vb6Format 
संबंधित मुद्दे