Index: src/Deltares.DSoilModel.Tests/SosSoilProfilesImporterTests.cs =================================================================== diff -u -r7 -r262 --- src/Deltares.DSoilModel.Tests/SosSoilProfilesImporterTests.cs (.../SosSoilProfilesImporterTests.cs) (revision 7) +++ src/Deltares.DSoilModel.Tests/SosSoilProfilesImporterTests.cs (.../SosSoilProfilesImporterTests.cs) (revision 262) @@ -227,5 +227,22 @@ Assert.AreEqual(Color.Maroon, project.SoilProfiles1D[2].Layers[5].Soil.Color); } } + + [Test] + public void DSoilModelIO_ImportFromCsvFileWithInvalidHeaders() + { + const string csvFileNameAndRelativePath = @"TestFiles\DSoilModelsoilprofilesWithInvalidHeaders.csv"; + + // Locate the test files. + var currentDirectory = Directory.GetCurrentDirectory(); + var csvFullFileName = Path.Combine(currentDirectory, csvFileNameAndRelativePath); + LogManager.Messages.Clear(); + using (var project = new DSoilModelProject()) + { + project.ReadSoilProfiles1DFromFile(csvFullFileName); + Assert.AreEqual(5,LogManager.Messages.Count, "Expected five messages"); + Assert.AreNotEqual(0,project.SoilProfiles1D.Count, "Expected the profiles were read anyway"); + } + } } } \ No newline at end of file Index: src/Deltares.DSoilModel.Data/Translations.xml =================================================================== diff -u -r67 -r262 --- src/Deltares.DSoilModel.Data/Translations.xml (.../Translations.xml) (revision 67) +++ src/Deltares.DSoilModel.Data/Translations.xml (.../Translations.xml) (revision 262) @@ -14,7 +14,7 @@ - @@ -24,6 +24,8 @@ + + @@ -41,4 +43,4 @@ - \ No newline at end of file + Index: utils/svn_insert_version.cmd =================================================================== diff -u -r6 -r262 --- utils/svn_insert_version.cmd (.../svn_insert_version.cmd) (revision 6) +++ utils/svn_insert_version.cmd (.../svn_insert_version.cmd) (revision 262) @@ -28,7 +28,7 @@ ECHO "setting custom in and out files." SET INTEXTFILE=%2 SET OUTTEXTFILE=%3 -) +) ECHO "parsing svn info in directory %CD%" @@ -64,13 +64,11 @@ ) ECHO "writing new %OUTTEXTFILE%" -FOR /f "tokens=1,* delims=�" %%A IN ( '"type %INTEXTFILE%"') DO ( - SET string=%%A - SET modified=!string:%SEARCHTEXT%=%SVN_REV%! - SET modified=!modified:%SEARCHROOT%=%SVN_ROOT%! - ECHO !modified! >> %OUTTEXTFILE% + +call powershell -Command "(gc %INTEXTFILE%) -replace '%SEARCHTEXT%', '%SVN_REV%' | Out-File -encoding ASCII %OUTTEXTFILE% + ) CD %ORG_DIR% ECHO "%0 done" -:EOF \ No newline at end of file +:EOF Index: src/Deltares.DSoilModel.Forms/Translations.xml =================================================================== diff -u -r224 -r262 --- src/Deltares.DSoilModel.Forms/Translations.xml (.../Translations.xml) (revision 224) +++ src/Deltares.DSoilModel.Forms/Translations.xml (.../Translations.xml) (revision 262) @@ -30,12 +30,12 @@ nl-NL="Importeer een sondering vanuit een GEF bestand" /> - + - + @@ -46,19 +46,19 @@ nl-NL="Het importeren van de volgende bestanden is mislukt:" /> - - + - + @@ -90,4 +90,4 @@ - \ No newline at end of file + Index: src/Deltares.DSoilModel.Data/SosSoilProfilesImporter.cs =================================================================== diff -u -r63 -r262 --- src/Deltares.DSoilModel.Data/SosSoilProfilesImporter.cs (.../SosSoilProfilesImporter.cs) (revision 63) +++ src/Deltares.DSoilModel.Data/SosSoilProfilesImporter.cs (.../SosSoilProfilesImporter.cs) (revision 262) @@ -43,15 +43,34 @@ using (var csv = new CsvReader(new StreamReader(fileName), true, ';')) { string[] headers = csv.GetFieldHeaders(); - // The definition of the csv contains one extra column (soiltype) which is now optional. + + string[] validHeaders = new string[] + { + "soilprofile_id", + "top_level", + "soil_name", + "soil_color", + "soil_type", + "max-d", + "min-d", + "remark", + "extra" + }; + // The definition of the csv contains one extra column (soil_type) which is now optional. // Next to that 5 extra optional columns are added for the SOS-import of which one (named extra) is unused for now // So number of columns may vary from 3 to 9. if ((headers.Count() < 3) || (headers.Count() > 9)) { - string csvHeaderError = LocalizationManager.GetTranslatedText(typeof(SoilProfilesImporter), - "csvHeaderError"); + string csvHeaderError = LocalizationManager.GetTranslatedText(this, "csvHeaderError"); throw new CsvImporterSoilProfilesException(String.Format("{0} : {1}", fileName, csvHeaderError)); } + //Check that all column names are known + var invalidNames = GetInvalidSoilProfileHeaders(headers, validHeaders); + if (invalidNames != "") + { + string csvHeaderError = LocalizationManager.GetTranslatedText(this, "csvHeaderInvalidColumns"); + LogManager.Messages.Add(new LogMessage(LogMessageType.Warning, this, String.Format("{0} : {1} -- {2}", fileName, csvHeaderError, invalidNames))); + } const string fieldsoilprofile_id = "soilprofile_id"; int colIndexSoilProfileId = CsvReaderUtilities.GetHeaderIndexByString(headers, fieldsoilprofile_id); CheckColumn(colIndexSoilProfileId, fileName, fieldsoilprofile_id); @@ -254,5 +273,34 @@ return type; return SoilType.Sand; } + + private string GetInvalidSoilProfileHeaders(string[] headers, string[] validHeaders) + { + string invalidHeaders = ""; + foreach (var name in headers) + { + bool found = false; + foreach (var validName in validHeaders) + { + if (name.Equals(validName)) + { + found = true; + break; + } + } + if (!found) + { + if (invalidHeaders == "") + { + invalidHeaders = name; + } + else + { + invalidHeaders = invalidHeaders + ", " + name; + } + } + } + return invalidHeaders; + } } } \ No newline at end of file Index: src/Deltares.DSoilModel.Tests/TestFiles/DSoilModelsoilprofilesWithInvalidHeaders.csv =================================================================== diff -u --- src/Deltares.DSoilModel.Tests/TestFiles/DSoilModelsoilprofilesWithInvalidHeaders.csv (revision 0) +++ src/Deltares.DSoilModel.Tests/TestFiles/DSoilModelsoilprofilesWithInvalidHeaders.csv (revision 262) @@ -0,0 +1,8 @@ +soilprofile_id;top_level;Soil_name;soiltype +10Z_286_STBI;33;ZAND;zand +10Z_286_STBI;-11.5;ZAND;Zand +10Z_311_STBI;60;VEEN;Veen +10Z_311_STBI;-3.2;VEEN;Zand +10Z_327_STBI;60;kLEI (0);Veen +10Z_400_STBI;60;WL_zanD;Veen +10Z_400_STBI;-0.9;wl_zand;Veen