一日分の備忘録

ゲーム制作におけるいろいろな実装の備忘録。基本的にはゲームエンジン中心。その中でもUE4がメイン。プログラマーなのでプログラム的な記事が多くなるかも

UE4で指定フォルダからファイルの読み込み(CSV編)

作っちゃったし備忘録書く必要あるかなとも思ったがとりあえず書いとく。CSV編としているが他のファイル形式を読み込んだものを書くかと言われると多分書かない。

.h

public:	

	UFUNCTION(BlueprintCallable, Category = "CSVReader")
	void LoadCSVData(FString Filename);
	UFUNCTION(BlueprintCallable, Category = "CSVReader")
	TArray<FString> GetRowDataByKey(FString Key);
	UFUNCTION(BlueprintCallable, Category = "CSVReader")
	TArray<FString> GetKey();

public:
	//変数
	TMap<FString, TArray<FString>> RowData;
	TArray<FString> KeyList;

.cpp

void ACSVReader::LoadCSVData(FString Filename)
{
	//CurrentDirectory取得
	FString dir = FPaths::GameDir();
	//ファイル名
	FString filename = dir + Filename + ".csv";
	//ファイル取得
	FString csvFullData;
	FFileHelper::LoadFileToString(csvFullData, *filename);
	//列で分解
	TArray<FString> row;
	csvFullData.ParseIntoArray(row, TEXT("\n"), true);
	//キーを登録
	row[0].ParseIntoArray(KeyList, TEXT(","), true);
	for(int i = 0 ; i != KeyList.Num() ; i++)
	{
		RowData.Add(KeyList[i]);
	}

	//キー以外の各要素をRowDataにキーと関連付けて登録
	TArray<FString> element;
	for (int i = 1; i != row.Num(); i++)
	{
		row[i].ParseIntoArray(element, TEXT(","), true);
		for (int j = 0; j != element.Num(); j++)
		{
			RowData[KeyList[j]].Add(element[j]);
		}
	}
}
TArray<FString> ACSVReader::GetRowDataByKey(FString Key)
{
	return RowData[Key];
}
TArray<FString> ACSVReader::GetKey()
{
	return KeyList;
}

どうやらFPaths::GameDir();でCurrentDirectoryが取得できるらしい。(ここだけ伝えたかった)
パッケージ化前は[各種ドライブ://~~~/MyProject/]
パッケージ化後は[各種ドライブ://~~~/exeファイルのある階層/MyProject/]
を取得する。
ちなみにブログ用に若干プログラムコードはサボってるので実装するときは各自ちゃんと作ってください。
使いみちあるかと言われると微妙になさそう。ユーザーに配布したゲームでCSV作ったらステージ自分で作れます!的な感じにしたらもしかするともしかするかもしれない。