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 115 of file CSVFile.cpp.

116{
117 if (CSVStream.is_open())
118 {
119 // If we have queued rows, write them out
121 {
122 for (const FString& Row : PendingRows)
123 {
124 WriteRaw(Row);
125 }
126 PendingRows.Empty();
127 }
128
129 CSVStream.close();
130 }
131}
void WriteRaw(const FString &Line)
Definition: CSVFile.cpp:107
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 25 of file CSVFile.cpp.

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

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

References Create().

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

◆ Destroy()

void UCSVFile::Destroy ( )

Definition at line 133 of file CSVFile.cpp.

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

References Close().

Referenced by AInstancedRendererManager::ExportTreesAsCSV().

◆ OpenStream()

void UCSVFile::OpenStream ( )
private

Definition at line 61 of file CSVFile.cpp.

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

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

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

◆ WriteRaw()

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

Definition at line 107 of file CSVFile.cpp.

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

References CSVStream, and OpenStream().

Referenced by Close(), and WriteRow().

◆ WriteRow()

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

Definition at line 77 of file CSVFile.cpp.

78{
79 if (!CSVStream.is_open()) OpenStream();
80 if (!CSVStream.is_open()) return;
81
82 // Determine delimiter
83 FString Delimiter = TEXT(",");
85 {
86 Delimiter = TEXT(";");
87 }
89 {
90 Delimiter = TEXT("\t");
91 }
92
93 // Join values using chosen delimiter
94 FString Line = FString::Join(Cells, *Delimiter);
95
97 {
98 WriteRaw(Line); // Write the line immediately
99 }
101 {
102 // Queue the line for later
103 PendingRows.Add(Line);
104 }
105}
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: