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作ったらステージ自分で作れます!的な感じにしたらもしかするともしかするかもしれない。