diff --git a/Source/StudyFrameworkPlugin/Private/SFCondition.cpp b/Source/StudyFrameworkPlugin/Private/SFCondition.cpp index aa24a20f41c71c124c0f6e00570ee4fae314f91a..b4ddcbc74479556e9e55024f4db14a6440d10862 100644 --- a/Source/StudyFrameworkPlugin/Private/SFCondition.cpp +++ b/Source/StudyFrameworkPlugin/Private/SFCondition.cpp @@ -112,8 +112,9 @@ bool USFCondition::StoreDependentVariableData(const FString& VarName, const FStr { return false; } - - DependentVariable->Value = Value; + FString SanitizedValue = Value; + SanitizeValueForCSV(SanitizedValue); + DependentVariable->Value = SanitizedValue; return true; } @@ -149,10 +150,15 @@ bool USFCondition::StoreMultipleTrialDependentVariableData(const FString& VarNam return false; } - USFGameInstance::Get()->GetParticipant()->StoreTrialInPhaseLongTable(TrialDependentVar, Values); + TArray<FString> SanitizedValues = Values; + for(FString& Value : SanitizedValues) + { + SanitizeValueForCSV(Value); + } + USFGameInstance::Get()->GetParticipant()->StoreTrialInPhaseLongTable(TrialDependentVar, SanitizedValues); std::vector<FString> ValuesVector; - for(const FString& Value : Values) + for(const FString& Value : SanitizedValues) { ValuesVector.push_back(Value); } @@ -193,6 +199,17 @@ USFDependentVariable* USFCondition::GetDependentVarForDataStoring(const FString& return nullptr; } +bool USFCondition::SanitizeValueForCSV(FString& Value) +{ + if(Value.Contains(",")) + { + FSFLoggingUtils::Log("Cannot log data containing a ',' into a csv file, replacing ',' with [Komma]", true); + Value.ReplaceInline(TEXT(","), TEXT("[Komma]")); + return false; + } + return true; +} + float USFCondition::GetTimeTaken() const { return TimeTaken; diff --git a/Source/StudyFrameworkPlugin/Public/SFCondition.h b/Source/StudyFrameworkPlugin/Public/SFCondition.h index ca4ce641f0a3025976251ac10eb48669d91ff4c5..21522f702dae7912231820ca38c2a0ddf891e86f 100644 --- a/Source/StudyFrameworkPlugin/Public/SFCondition.h +++ b/Source/StudyFrameworkPlugin/Public/SFCondition.h @@ -78,6 +78,8 @@ protected: USFDependentVariable* GetDependentVarForDataStoring(const FString& VarName, const FString& Data); + bool SanitizeValueForCSV(FString& Value); + private: bool bStarted=false;