ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

【UE4 C++】 Datatable 读写、导入导出 CSV/Json

2021-05-08 17:33:45  阅读:810  来源: 互联网

标签:CSVPath TEXT UserInfoDataTable C++ Json UserInfo DataDrive UE4 DT


Datatable 读取行数据

1. 创建结构体

  • 继承自 FTableRowBase

    USTRUCT(BlueprintType)
    struct  FSimpleStruct :public FTableRowBase
    {
    	GENERATED_USTRUCT_BODY()
    public:
    
    	UPROPERTY(EditAnywhere)
    		FString name;
    
    	UPROPERTY(EditAnywhere)
    		int32 health;
    
    	UPROPERTY(EditAnywhere)
    		UTexture2D* icon;
    };
    

2. 创建 Datatable

  • 选择 FSimpleStruct 结构体

    image

3. 读取行数据

  • FindRow

    UserInfoDataTable = LoadObject<UDataTable>(this, TEXT("DataTable'/Game/CPPFunction/DataDrive/DT_UserInfo.DT_UserInfo'"));
    if (UserInfoDataTable)
    {
    	for (FName RowName : UserInfoDataTable->GetRowNames())
    	{
    		FSimpleStruct* UserInfo = UserInfoDataTable->FindRow<FSimpleStruct>(RowName, TEXT("name"));
    		if (UserInfo)
    		{
    			UKismetSystemLibrary::PrintString(GetWorld(), UserInfo->name);
    		}
    	}
    }
    else
    {
    	UKismetSystemLibrary::PrintString(GetWorld(), TEXT(" Not Find DataTable!"));
    }
    
  • GetRowMap

    UserInfoDataTable = LoadObject<UDataTable>(this, TEXT("DataTable'/Game/CPPFunction/DataDrive/DT_UserInfo.DT_UserInfo'"));
    if (UserInfoDataTable)
    {
    	for (auto it : UserInfoDataTable->GetRowMap())
    	{
    		FString RowName = (it.Key).ToString();
    
    		FSimpleStruct* UserInfo = (FSimpleStruct*)it.Value;
    
    		UKismetSystemLibrary::PrintString(GetWorld(), FString::Printf(TEXT("%s %s"), *RowName, *UserInfo->name));
    	}
    }
    

Datatable 写入行数据

  • AddRow

    UserInfoDataTable = LoadObject<UDataTable>(this, TEXT("DataTable'/Game/CPPFunction/DataDrive/DT_UserInfo.DT_UserInfo'"));
    if (UserInfoDataTable)
    {
    	FSimpleStruct* UserInfo = new FSimpleStruct();
    	UserInfo->name = TEXT("Lily");
    	UserInfo->health = 80;
    	FName RowName = TEXT("Player3");
    	UserInfoDataTable->AddRow(RowName, *UserInfo);
    }
    

导入CSV

  • csv 文件

    ---,name,health,icon
    Player4,"马克","200","Texture2D'/Game/FourEvilDragonsHP/Textures/DragonTheUsurper/BlueHPTex.BlueHPTex'"
    Player5,"冉冰","90","Texture2D'/Game/FourEvilDragonsHP/Textures/DragonTheSoulEater/BlueHPTex.BlueHPTex'"
    Player6,"墨城","150","None"
    
  • 填充现有的 DataTable

    UserInfoDataTable = LoadObject<UDataTable>(this, TEXT("DataTable'/Game/CPPFunction/DataDrive/DT_UserInfo.DT_UserInfo'"));
    if (UserInfoDataTable)
    {
    	FString CSVPath = FPaths::ProjectDir() + TEXT("DataDrive/UserInfo.csv");
    	CSVPath = FPaths::ConvertRelativePathToFull(CSVPath);
    	if (FPlatformFileManager::Get().GetPlatformFile().FileExists(*CSVPath))
    	{
    		UDataTableFunctionLibrary::FillDataTableFromCSVFile(UserInfoDataTable, CSVPath);
    	}
    }
    
  • 生成 UDataTable

    UDataTable* ADataDriveActor::CreateDataTableFromCSV()
    {
    	FString CSVPath = FPaths::ProjectDir() + TEXT("DataDrive/UserInfo.csv");
    	CSVPath = FPaths::ConvertRelativePathToFull(CSVPath);
    	if (FPlatformFileManager::Get().GetPlatformFile().FileExists(*CSVPath))
    	{
    		UKismetSystemLibrary::PrintString(GetWorld(), *CSVPath);
    		FString CSVData;
    		FFileHelper::LoadFileToString(CSVData, *CSVPath);
    		UDataTable* DT_UserInfo = NewObject<UDataTable>(GetTransientPackage(), FName(TEXT("DT_UserInfo2")));
    		DT_UserInfo->RowStruct = FSimpleStruct::StaticStruct();
    		DT_UserInfo->CreateTableFromCSVString(CSVData);
    
    		return DT_UserInfo;
    	}
    	return nullptr;
    }
    

导出 CSV

  • GetTableAsCSV

    UserInfoDataTable = LoadObject<UDataTable>(this, TEXT("DataTable'/Game/CPPFunction/DataDrive/DT_UserInfo.DT_UserInfo'"));
    if (UserInfoDataTable)
    {
    	FString CSVString = UserInfoDataTable->GetTableAsCSV();
    	FString CSVPath = FPaths::ProjectDir() + TEXT("DataDrive/UserInfo2.csv");
    	FFileHelper::SaveStringToFile(CSVString, *CSVPath, FFileHelper::EEncodingOptions::ForceUTF8);
    }
    

导入导出Json

省略

标签:CSVPath,TEXT,UserInfoDataTable,C++,Json,UserInfo,DataDrive,UE4,DT
来源: https://www.cnblogs.com/shiroe/p/14745783.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有