ReadDataFromCSV.h
UCLASS() class MYPROJECT_API UReadDataFromCSV : public UBlueprintFunctionLibrary { GENERATED_BODY() public: UFUNCTION(BlueprintCallable, Category = "CSV") static TArray<FString> GetCSVDataToString(FString csvPath); };
ReadDataFromCSV.cpp
#include "ReadDataFromCSV.h" //CSV解析器 #include "Runtime/Core/Public/Serialization/Csv/CsvParser.h" //文件路徑檢索助手 #include "Runtime/Core/Public/Misc/Paths.h" TArray<FString> UReadDataFromCSV::GetCSVDataToString(FString csvPath) { //文件路徑+文件名 FString csvFile = FPaths::ProjectContentDir() + csvPath; //返回值 TArray<FString> csvContent; //判斷路徑下的文件是否存在 if (FPaths::FileExists(csvFile)) { FString FileContent; //把csv文件內容讀取到字符串中 FFileHelper::LoadFileToString(FileContent, *csvFile); //把字符串進行解析 FCsvParser* csvfiles = new FCsvParser(FileContent); //解析器GetRows()方法會返回所有的單元格里的C風格的字符串 /* *( [TCHAR*] [TCHAR*] [TCHAR*] )——> TArray<const TCHAR*> \ * [TCHAR*] [TCHAR*] [TCHAR*] )——> TArray<TArray<const TCHAR*>> * [TCHAR*] [TCHAR*] [TCHAR*] / */ FCsvParser::FRows content = csvfiles->GetRows(); //TArray<TArray<const TCHAR*>> content = csvfiles->GetRows(); /* 遍歷數組 * int[] arr = new int[] { 1, 2, 3 } * for (int i : arr) { * ... * } */ //從第一行遍歷到最后一行 for (TArray<const TCHAR*>& ite : content) { //在當前行中,從第一個字符指針(單元格里的字符串)遍歷到最后一個字符指針(單元格里的字符串) for (const TCHAR*& chr : ite) { csvContent.Add(chr); } } return csvContent; } else return csvContent; }
測試數據
TestData.csv
關卡藍圖
運行結果