UE4-txt文本读取

#include "Misc/FileHelper.h"
#include "Paths.h

bool AReadTxtFileActor::LoadTextArray(FString FileName, int32& BPM, int32& TimeSignatureLeftNum, int32& TimeSignatureRightNum, TArray<FAisleNote>& AisleNoteArray)
{
TArray<FString> OutTextArray;
if (!FFileHelper::LoadFileToStringArray(OutTextArray, *(FPaths::ProjectDir() + FileName)))//文件检查
{
UE_LOG(LogTemp, Warning, TEXT("文件路径不正确,读取失败"));
return false;
}
if (OutTextArray.Num()< 4)//文件长度检查
{
UE_LOG(LogTemp, Warning, TEXT("文件过短,请检查文件"));
return false;
}
BPM = FCString::Atoi(*OutTextArray[0]);//BPM设置
UE_LOG(LogTemp, Log, TEXT("BPM:%d"),BPM);
FString LeftNum,RightNum;
if (!OutTextArray[1].Split(TEXT("/"), &LeftNum, &RightNum))//拍数检查
{
UE_LOG(LogTemp, Warning, TEXT("拍号有误,请检查文件"));
return false;
}
TimeSignatureLeftNum = FCString::Atoi(*LeftNum);
TimeSignatureRightNum = FCString::Atoi(*RightNum);
UE_LOG(LogTemp, Log, TEXT("拍号左数字:%d / 拍号右数字:%d"), TimeSignatureLeftNum, TimeSignatureRightNum);
FAisleNote AisleNote;
FNoteInfo NoteInfo;
if (!OutTextArray[2].Split(TEXT("#"), &LeftNum, &RightNum))
{
UE_LOG(LogTemp, Warning, TEXT("音符通道不正确"));
return false;
}
AisleNote.NoteNum = FCString::Atoi(*RightNum);
UE_LOG(LogTemp, Log, TEXT("通道:%s"), *RightNum);

for (int32 i = 3; i < OutTextArray.Num();++i)
{
if (OutTextArray[i].Split(TEXT("#"),&LeftNum,&RightNum))
{
AisleNoteArray.Add(AisleNote);
AisleNote.NoteInfoArray.Empty();
AisleNote.NoteNum = FCString::Atoi(*RightNum);
UE_LOG(LogTemp, Log, TEXT("通道:%s"), *RightNum);
continue;
}
if (OutTextArray[i].Split(TEXT("|"), &LeftNum, &RightNum))
{
NoteInfo.Volume = FCString::Atoi(*LeftNum);
NoteInfo.StarTime = FCString::Atoi(*RightNum);
UE_LOG(LogTemp, Log, TEXT("音量:%s |开始时间:%s"), *LeftNum, *RightNum);
AisleNote.NoteInfoArray.Add(NoteInfo);
}
}
AisleNoteArray.Add(AisleNote);
UE_LOG(LogTemp, Log, TEXT("共有通道数:%d"),AisleNoteArray.Num());
return true;
}

posted @ 2020-04-07 10:51  小喜蛋7  阅读(2204)  评论(0编辑  收藏  举报