C#读文件内容

读文件分为两部分,第一部分,写内容每一项的get,set方法,写在专门的文件里
第二部分,读文件内容,也写在单独的文件里。SymbolDBInfoTable.cs里。

SymbolDBInfo.cs
using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;

namespace SymbolNameEditor
{
    public class SymbolDBInfo
    {
        //型名
        private string _kataName = string.Empty;
        public string KataName
        {
            get { return _kataName; }
            set { _kataName = value; }
        }

        //ステータス
        private string _status = string.Empty;
        public string Status
        {
            get { return _status; }
            set { _status = value; }
        }

        //基本シンボル
        private string _baseSymbol = string.Empty;
        public string BaseSymbol
        {
            get { return _baseSymbol; }
            set { _baseSymbol = value; }
        }

        //実装条件リスト
        private List<string> _elementSymbols = new List<string>();
        public List<string> ElementSymbols
        {
            get { return _elementSymbols; }
            set { _elementSymbols = value; }
        }

        //任意属性リスト
        private List<string> _optionalAttrs = new List<string>();
        public List<string> OptionalAttrs
        {
            get { return _optionalAttrs; }
            set { _optionalAttrs = value; }
        }
    }
}
SymbolDBInfoTable.cs

namespace SymbolNameEditor
{
    public class SymbolDBInfoTable
    {
        /// SymbolDBInfoオブジェクトのリスト
        private Hashtable _symbolDBInfos = new Hashtable();

        /// <summary>
        /// 登録されているSymbolDBInfoオブジェクトリスト
        /// </summary>
        public Hashtable SymbolDBInfos
        {
            get
            {
                return _symbolDBInfos;
            }
        }

        /// <summary>
        /// 登録されているSymbolDBInfoオブジェクトを削除する
        /// </summary>
        public void Clear()
        {
            _symbolDBInfos.Clear();
        }

        /// <summary>
        /// シンボルDBのタイトル(一行目)の読み込み
        /// </summary>
        /// <returns>true:読み込みOK;false:読み込みNG</returns>
        public bool ReadTitleSymbolDB()
        {
            string symbolPath = ActiveObject.Current.ConfInfo.SymbolTablePath;
            try
            {
                using (StreamReader sr = new StreamReader(symbolPath, Encoding.GetEncoding(Constants.Character)))
                {
                    String line = string.Empty;
                    int lineNum = -1;
                    while ((line = sr.ReadLine()) != null)
                    {
                        //"#"で始まる行はコメント
                        if (line.StartsWith(Constants.Sharp))
                            continue;
                        this.Clear();
                        lineNum++;

                        string[] anasysRes = line.Split(Constants.TabStr.ToCharArray());
                        if (anasysRes.Length == ActiveObject.Current.ConfInfo.GetSymboFileColumns())
                        {
                            //一行目はヘッダ
                            if (lineNum == 0)
                            {
                                //実装条件コンボボックス用リスト
                                ArrayList elementComboList = new ArrayList();

                                string[] confStr1 = ActiveObject.Current.ConfInfo.SymbolNameColumns.Split(Constants.CommaStr.ToCharArray());
                                foreach (string s in confStr1)
                                {
                                    elementComboList.Add(anasysRes[int.Parse(s)]);
                                }
                                ((SymbolNameEditorForm)ActiveObject.Current.MainForm).SetConditionComboBox(elementComboList);

                                //任意属性用リスト
                                ArrayList attriList = new ArrayList();
                                string[] confStr2 = ActiveObject.Current.ConfInfo.SymbolAttrColumns.Split(Constants.CommaStr.ToCharArray());
                                foreach (string s in confStr2)
                                {
                                    attriList.Add(anasysRes[int.Parse(s)]);
                                }
                                ActiveObject.Current.DataSource.SetColumnNames(attriList);

                                break;
                            }
                        }
                        else
                        {
                            throw new Exception(string.Format("シンボル名テーブルのファイルフォーマットが不正です。<{0}>", line));
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                string msg = string.Format("シンボル名テーブル<{0}>の読み込みが失敗でした。\n<{1}>",
                    symbolPath, ex.Message);
                MessageBox.Show(msg, "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return false;
            }

            return true;
        }

        /// <summary>
        /// シンボルDBのタイトル(一行目以後)の読み込み
        /// </summary>
        /// <returns>true:読み込みOK;false:読み込みNG</returns>
        public bool ReadContentSymbolDB()
        {
            string symbolPath = ActiveObject.Current.ConfInfo.SymbolTablePath;
            try
            {
                using (StreamReader sr = new StreamReader(symbolPath, Encoding.GetEncoding(Constants.Character)))
                {
                    Clear();

                    StringBuilder msgsConsistency = new StringBuilder();
                    StringBuilder msgsProhibition = new StringBuilder();
                    StringBuilder rightKatamei  = new StringBuilder();
                    String line = string.Empty;
                    int lineNum = -1;
                    while ((line = sr.ReadLine()) != null)
                    {
                        //"#"で始まる行はコメント
                        if (line.StartsWith(Constants.Sharp))
                            continue;

                        lineNum++;

                        //一行目は呼び飛ばし
                        if (lineNum <= 0)
                            continue;

                        string[] anasysRes = line.Split(Constants.TabStr.ToCharArray());
                        if (anasysRes.Length != ActiveObject.Current.ConfInfo.GetSymboFileColumns())
                                                    {
                            throw new Exception(string.Format("シンボル名テーブルのファイルフォーマットが不正です。<{0}>", line));
                        }
                        else
                        {
                            if (_symbolDBInfos.ContainsKey(anasysRes[1]))
                            {//整合性チェック
                                if(msgsProhibition.Length > 0)
                                    msgsProhibition.Append(Constants.EnterStr);

                                msgsProhibition.Append(anasysRes[1]);
                                continue;
                            }
                          
                           else if(anasysRes[1].IndexOf(Constants.BigBrackLeft) >= 0 ||
                                anasysRes[1].IndexOf(Constants.BigBrackRight) >= 0)
                            {//禁止文字チェック
                                if(msgsConsistency.Length > 0)
                                    msgsConsistency.Append(Constants.EnterStr);

                                msgsConsistency.Append(anasysRes[1]);
                                continue;
                            }
                          
                            SymbolDBInfo oneSymbolInfo = new SymbolDBInfo();

                            oneSymbolInfo.KataName = anasysRes[1];//型名
                            oneSymbolInfo.Status = anasysRes[2];//ステータス
                            oneSymbolInfo.BaseSymbol = anasysRes[3];//基本シンボル


                            //実装条件リスト
                            string[] confSymbolNameColumns =
                                ActiveObject.Current.ConfInfo.SymbolNameColumns.Split(Constants.CommaStr.ToCharArray());
                            foreach (string s in confSymbolNameColumns)
                            {
                                oneSymbolInfo.ElementSymbols.Add(anasysRes[int.Parse(s)]);
                            }

                            //任意属性リスト
                            string[] confSymbolAttrColumns =
                                ActiveObject.Current.ConfInfo.SymbolAttrColumns.Split(Constants.CommaStr.ToCharArray());
                            foreach (string s in confSymbolAttrColumns)
                            {
                                oneSymbolInfo.OptionalAttrs.Add(anasysRes[int.Parse(s)]);
                            }

                            _symbolDBInfos.Add(oneSymbolInfo.KataName, oneSymbolInfo);
                        }
                    }

                    //エラーチェック
                   
                    if (msgsConsistency.Length > 0 || msgsProhibition.Length > 0)
                    {
                        this.Clear();

                        StringBuilder msgs = new StringBuilder();
                        if (msgsConsistency.Length > 0)
                        {
                            msgs.Append(Constants.ConsistencyMsgHead);
                            msgs.Append(Constants.EnterStr);
                            msgs.Append(msgsConsistency.ToString());
                        }

                        if (msgsProhibition.Length > 0)
                        {
                            msgs.Append(Constants.ProhibitionMsgHead);
                            msgs.Append(Constants.EnterStr);
                            msgs.Append(msgsProhibition.ToString());
                        }
                        DialogResult result = MessageBox.Show(msgs.ToString(), "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        throw new Exception(msgs.ToString());
                    }

                }
            }
            catch (Exception ex)
            {
                string msg = string.Format("シンボル名テーブル<{0}>の読み込みが失敗でした。\n<{1}>",
                    symbolPath, ex.Message);
                MessageBox.Show(msg, "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return false;
            }
            return true;
        }
    }
}

posted on 2007-08-07 09:13  Sabrina  阅读(304)  评论(0)    收藏  举报

导航