基本的にレコードのデータベースである CSV ファイルを操作しようとしています。ゲームの読み込み時に、レコードを読み込み、プレハブ ボタンを 1 つずつ、CSV ファイルから正しいテキストでインスタンス化します。ボタンのインデックスが、CSV ファイルで情報を取得したレコードのインデックスと同じになるとは限りません。これまでのところ、トリックの「名前」フィールドに基づいて変更された特定のレコードを CSV ファイルに反映させる保存機能をセットアップしました。これを達成する簡単な方法は何ですか?
これは変更を CSV に保存するコードであり、Unity は例外、IOException: パス上の共有違反を与えます:
void WriteCSVFile()
{
StreamReader strReader = new StreamReader("Assets/Resources/characters.csv.txt");
StreamWriter strWriter = new StreamWriter("Assets/Resources/characters.csv.txt");
bool endOfFile = false;
string header = strReader.ReadLine();
strWriter.WriteLine(header);
string data;
while(!endOfFile)
{
data = strReader.ReadLine();
strWriter.WriteLine(data);
if(data == null)
{
endOfFile = true;
break;
}
//dataValues is each row
var dataValues = data.Split(',');
if(dataValues[1] == trickName)
{
dataValues[3] = currentXP.ToString();
dataValues[4] = currentLevel.ToString();
dataValues[5] = maximumXP.ToString();
strWriter.WriteLine(dataValues[3]);
strWriter.WriteLine(dataValues[4]);
strWriter.WriteLine(dataValues[5]);
}
}
}
更新: 現在は機能しているようですが、もう 1 つの手順についてサポートが必要です。私の保存関数の更新版では、各レコードをカンマで区切って dataValues という配列にしています。dataValues の適切なフィールドに変更を加えましたが、Log ステートメントを実行すると、テキストが 1 行に分割されます。ファイルを追加して元の CSV ファイルに上書きするにはどうすればよいと思いますか? これが私の保存機能の更新です: '''void WriteCSVFile(){
string txt = System.IO.File.ReadAllText("Assets/Resources/characters.csv.txt");
//StreamWriter strWriter = new StreamWriter("Assets/Resources/characters.csv.txt");
string[] data = txt.Split(new char[] { '\n' });
foreach(string record in data){
var dataValues = record.Split(',');
if(dataValues.Length >= 6 && dataValues[1] == trickName){
Debug.Log(dataValues[1]);
//dataValues[3] = currentXP.ToString();
//dataValues[4] = currentLevel.ToString();
//dataValues[5] = maximumXP.ToString();
}
}
'''