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;
}
}
}
浙公网安备 33010602011771号