UE4讀取CSV文件

  1、首先新建excle文件,在文件中列好相關內容。

  

 

 

  2、點擊另存爲選擇

 

  

 

   點保存會彈出

  

 

   選擇 是 ,這樣就會生成一份*.csv文件。

  3、接下來在代碼中讀取該文件。  

 1 bool LoadCSVFromFile(FString FileName)
 2 {
 3     FString CSVFile = FPaths::ProjectConfigDir() + FileName;
 4 
 5     FArchive* FileReader(IFileManager::Get().CreateFileReader(*CSVFile));
 6     if (FileReader == nullptr)
 7     {
 8         FPlatformMisc::LowLevelOutputDebugStringf(TEXT("LoadCSVFromFile %s Failed"), *FileName);
 9 
10         return false;
11     }
12 
13     //
14     FileReader->Flush();
15     int64 fileLength = FileReader->TotalSize();
16     char *fileBuffer = new char[fileLength + 1];
17     FileReader->Serialize(fileBuffer, fileLength);
18     fileBuffer[fileLength] = 0;
19 
20     m_CSVBuffer = UTF8_TO_TCHAR(fileBuffer);
21     m_CSVHead = m_CSVBuffer.Left(3);
22     char *pBegin = fileBuffer/* +3*/;
23     char *pEnd = strchr(pBegin, '\n');
24 
25     // get column
26     FString StrColumn;
27     StrColumn.AppendChars(UTF8_TO_TCHAR(pBegin), pEnd - pBegin);
28 
29     // parse string 
30     m_ColumnMap.Empty();
31     //m_TableMap.Empty();
32 
33     GetParamFromString(StrColumn, m_ColumnMap);
34     m_TableMap.Add(m_ColumnMap);
35 
36     // get data
37     pBegin = pEnd + 1;
38     pEnd = strchr(pBegin, '\n');
39     while (pEnd)
40     {
41         FString StrTemp;
42         StrTemp.AppendChars(UTF8_TO_TCHAR(pBegin), pEnd - pBegin);
43         TArray<FString> StringVec;
44         GetParamFromString(StrTemp, StringVec);
45         if (m_ColumnMap.Num() != StringVec.Num()) {
46             FPlatformMisc::LowLevelOutputDebugStringf(TEXT("Load failed %s"), *FileName);
47             return false;
48         }
49         m_TableMap.Add(StringVec);
50 
51         pBegin = pEnd + 1;
52         pEnd = strchr(pBegin, '\n');
53     }
54 
55 
56     // Close file
57     delete[] fileBuffer;
58     fileBuffer = NULL;
59 
60     pBegin = NULL;
61     pEnd = NULL;
62 
63     //FileReader->Close();
64     delete FileReader;
65     UE_LOG(LogHttpApi, Log, TEXT("LoadCSV(%s) Succeeded"), *FileName);
66     return true;
67 }
 1 int32 UHttpApiComponent::GetParamFromString(FString ScrStr, TArray<FString> &OutBuffer, char delim)
 2 {
 3     char* Texts = TCHAR_TO_ANSI(*ScrStr);
 4     int32 StrLen = ScrStr.Len();
 5     char Buffer[512];
 6     int index = 0;
 7     for (int32 i = 0; i < StrLen; i++)
 8     {
 9         if (Texts[i] == delim || Texts[i] == '\r')
10         {
11             Buffer[index] = 0;
12             FString Tem = UTF8_TO_TCHAR(Buffer);
13             OutBuffer.Add(Tem);
14             index = 0;
15         }
16         else
17             Buffer[index++] = Texts[i];
18     }
19     return OutBuffer.Num();
20 }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章