static void _Data_writeToTextFile (Daata me, MelderFile file, bool verbose) { try { if (! Data_canWriteText (me)) Melder_throw (U"Objects of class ", my classInfo -> className, U" cannot be written to a text file."); autoMelderFile mfile = Data_createTextFile (me, file, verbose); #ifndef _WIN32 flockfile (file -> filePointer); // BUG #endif MelderFile_write (file, U"File type = \"ooTextFile\"\nObject class = \"", my classInfo -> className); if (my classInfo -> version > 0) MelderFile_write (file, U" ", my classInfo -> version); MelderFile_write (file, U"\"\n"); Data_writeText (me, file); MelderFile_writeCharacter (file, U'\n'); #ifndef _WIN32 if (file -> filePointer) funlockfile (file -> filePointer); #endif mfile.close (); } catch (MelderError) { #ifndef _WIN32 if (file -> filePointer) funlockfile (file -> filePointer); // the file pointer is null before Data_createTextFile() and after mfile.close() #endif throw; } }
void structTableOfReal :: v_writeText (MelderFile file) { texputi4 (file, numberOfColumns, L"numberOfColumns", 0,0,0,0,0); MelderFile_write (file, L"\ncolumnLabels []: "); if (numberOfColumns < 1) MelderFile_write (file, L"(empty)"); MelderFile_write (file, L"\n"); for (long i = 1; i <= numberOfColumns; i ++) { fprintquotedstring (file, columnLabels [i]); MelderFile_writeCharacter (file, '\t'); } texputi4 (file, numberOfRows, L"numberOfRows", 0,0,0,0,0); for (long i = 1; i <= numberOfRows; i ++) { MelderFile_write (file, L"\nrow [", Melder_integer (i), L"]: "); fprintquotedstring (file, rowLabels [i]); for (long j = 1; j <= numberOfColumns; j ++) { double x = data [i] [j]; MelderFile_write (file, L"\t", Melder_double (x)); } } }
static void fprintquotedstring (MelderFile file, const wchar_t *s) { MelderFile_writeCharacter (file, '\"'); if (s) { wchar_t c; while ((c = *s ++) != '\0') { MelderFile_writeCharacter (file, c); if (c == '\"') MelderFile_writeCharacter (file, c); } } MelderFile_writeCharacter (file, '\"'); }