Agrarsense
Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes | List of all members
UCSVFile Class Reference

#include <CSVFile.h>

Inheritance diagram for UCSVFile:
Inheritance graph
[legend]
Collaboration diagram for UCSVFile:
Collaboration graph
[legend]

Public Member Functions

void WriteRow (const TArray< FString > &Cells)
 
void Close ()
 
void Destroy ()
 

Static Public Member Functions

static UCSVFileCreateCSVFile (const FString &FileNameWithoutExtension, const FCSVFileSettings &Settings)
 

Private Member Functions

void Create (const FString &FileNameWithoutExtension, const FCSVFileSettings &Settings)
 
void OpenStream ()
 
void WriteRaw (const FString &Line)
 

Private Attributes

TArray< FString > PendingRows
 
FString FilePath
 
FCSVFileSettings CurrentSettings
 
std::ofstream CSVStream
 

Detailed Description

CSV file writer utility Usage example:

FCSVFileSettings Settings; UCSVFile* CSV = UCSVFile::CreateCSVFile("MyCoolCSVFile", Settings); CSV->WriteRow({ TEXT("Time"), TEXT("X"), TEXT("Y"), TEXT("Z") }); CSV->WriteRow({ TEXT("12.3"), TEXT("100"), TEXT("200"), TEXT("300") }); CSV->Destroy();

Definition at line 65 of file CSVFile.h.

Member Function Documentation

◆ Close()

void UCSVFile::Close ( )

Definition at line 116 of file CSVFile.cpp.

117{
118 if (CSVStream.is_open())
119 {
120 // If we have queued rows, write them out
122 {
123 for (const FString& Row : PendingRows)
124 {
125 WriteRaw(Row);
126 }
127 PendingRows.Empty();
128 }
129
130 CSVStream.close();
131 }
132}
void WriteRaw(const FString &Line)
Definition: CSVFile.cpp:108
std::ofstream CSVStream
Definition: CSVFile.h:92
TArray< FString > PendingRows
Definition: CSVFile.h:86
FCSVFileSettings CurrentSettings
Definition: CSVFile.h:90
FCSVFileWriteOptions FileWriteOption
Definition: CSVFile.h:45

References CSVStream, CurrentSettings, FCSVFileSettings::FileWriteOption, PendingRows, Queue, and WriteRaw().

Referenced by Destroy(), and ATagger::ExportObjectLocationsToCSV().

◆ Create()

void UCSVFile::Create ( const FString &  FileNameWithoutExtension,
const FCSVFileSettings Settings 
)
private

Definition at line 26 of file CSVFile.cpp.

27{
28 CurrentSettings = Settings;
29
30 // Simulator data directory for this run. Returns SIMULATOR_ROOT/Data/Run_{NUM}
31 FString DataDirectory = UAgrarsensePaths::GetDataFolder();
32
33 FString BasePath = Settings.CustomPath.IsEmpty() ? DataDirectory + "/CSV/" : Settings.CustomPath;
34 IPlatformFile& PlatformFile = FPlatformFileManager::Get().GetPlatformFile();
35 if (!PlatformFile.DirectoryExists(*BasePath))
36 {
37 PlatformFile.CreateDirectoryTree(*BasePath);
38 }
39
40 FString FullPath = FPaths::Combine(*BasePath, FileNameWithoutExtension + TEXT(".csv"));
41 UE_LOG(LogTemp, Warning, TEXT("FullPath: %s"), *FullPath);
42
43 if (Settings.CreateUnique)
44 {
45 int32 Counter = 0;
46 while (FPaths::FileExists(FullPath))
47 {
48 FullPath = FPaths::Combine(*BasePath, FileNameWithoutExtension + FString::Printf(TEXT("_%d.csv"), Counter++));
49 }
50 }
51
53 {
54 PendingRows.Reserve(Settings.QueueSize);
55 }
56
57 FilePath = FullPath;
58
59 OpenStream();
60}
static FString GetDataFolder()
FString FilePath
Definition: CSVFile.h:88
void OpenStream()
Definition: CSVFile.cpp:62
bool CreateUnique
Definition: CSVFile.h:42
int32 QueueSize
Definition: CSVFile.h:48
FString CustomPath
Definition: CSVFile.h:51

References FCSVFileSettings::CreateUnique, CurrentSettings, FCSVFileSettings::CustomPath, FilePath, FCSVFileSettings::FileWriteOption, UAgrarsensePaths::GetDataFolder(), OpenStream(), PendingRows, Queue, and FCSVFileSettings::QueueSize.

Referenced by CreateCSVFile().

◆ CreateCSVFile()

UCSVFile * UCSVFile::CreateCSVFile ( const FString &  FileNameWithoutExtension,
const FCSVFileSettings Settings 
)
static

Definition at line 15 of file CSVFile.cpp.

16{
17 UCSVFile* CSVFile = NewObject<UCSVFile>(UCSVFile::StaticClass());
18 CSVFile->AddToRoot();
19 if (CSVFile)
20 {
21 CSVFile->Create(FileNameWithoutExtension, Settings);
22 }
23 return CSVFile;
24}
void Create(const FString &FileNameWithoutExtension, const FCSVFileSettings &Settings)
Definition: CSVFile.cpp:26

References Create().

Referenced by ATagger::CreateCSVFile(), and AInstancedRendererManager::ExportTreesAsCSV().

◆ Destroy()

void UCSVFile::Destroy ( )

Definition at line 134 of file CSVFile.cpp.

135{
136 Close();
137 ConditionalBeginDestroy();
138}
void Close()
Definition: CSVFile.cpp:116

References Close().

Referenced by AInstancedRendererManager::ExportTreesAsCSV().

◆ OpenStream()

void UCSVFile::OpenStream ( )
private

Definition at line 62 of file CSVFile.cpp.

63{
64 if (CSVStream.is_open())
65 {
66 CSVStream.close();
67 }
68
69 std::ios_base::openmode Mode = std::ios::out;
71 {
72 Mode |= std::ios::app;
73 }
74
75 CSVStream.open(TCHAR_TO_UTF8(*FilePath), Mode);
76}

References FCSVFileSettings::Append, CSVStream, CurrentSettings, and FilePath.

Referenced by Create(), WriteRaw(), and WriteRow().

◆ WriteRaw()

void UCSVFile::WriteRaw ( const FString &  Line)
private

Definition at line 108 of file CSVFile.cpp.

109{
110 if (!CSVStream.is_open()) OpenStream();
111 if (!CSVStream.is_open()) return;
112
113 CSVStream << TCHAR_TO_UTF8(*Line) << std::endl;
114}

References CSVStream, and OpenStream().

Referenced by Close(), and WriteRow().

◆ WriteRow()

void UCSVFile::WriteRow ( const TArray< FString > &  Cells)

Definition at line 78 of file CSVFile.cpp.

79{
80 if (!CSVStream.is_open()) OpenStream();
81 if (!CSVStream.is_open()) return;
82
83 // Determine delimiter
84 FString Delimiter = TEXT(",");
86 {
87 Delimiter = TEXT(";");
88 }
90 {
91 Delimiter = TEXT("\t");
92 }
93
94 // Join values using chosen delimiter
95 FString Line = FString::Join(Cells, *Delimiter);
96
98 {
99 WriteRaw(Line); // Write the line immediately
100 }
102 {
103 // Queue the line for later
104 PendingRows.Add(Line);
105 }
106}
ECSVDelimiter Delimiter
Definition: CSVFile.h:36

References CSVStream, CurrentSettings, FCSVFileSettings::Delimiter, FCSVFileSettings::FileWriteOption, Immediate, OpenStream(), PendingRows, Queue, Semicolon, Tab, and WriteRaw().

Referenced by ATagger::CreateCSVFile(), AInstancedRendererManager::ExportTreesAsCSV(), and ATagger::WriteComponentToCSV().

Member Data Documentation

◆ CSVStream

std::ofstream UCSVFile::CSVStream
private

Definition at line 92 of file CSVFile.h.

Referenced by Close(), OpenStream(), WriteRaw(), and WriteRow().

◆ CurrentSettings

FCSVFileSettings UCSVFile::CurrentSettings
private

Definition at line 90 of file CSVFile.h.

Referenced by Close(), Create(), OpenStream(), and WriteRow().

◆ FilePath

FString UCSVFile::FilePath
private

Definition at line 88 of file CSVFile.h.

Referenced by Create(), and OpenStream().

◆ PendingRows

TArray<FString> UCSVFile::PendingRows
private

Definition at line 86 of file CSVFile.h.

Referenced by Close(), Create(), and WriteRow().


The documentation for this class was generated from the following files: