Перейти к содержанию
    

fatfs - вставить данные в файл.

8 минут назад, simark1979 сказал:

Могу быть не совсем быть точным. Но если файл с данными содержит в себе только данные (не обернутые в js или html) , браузеры (кроме Mozilla) не даст его открыть из соображений безопасности, либо придется делать лишние телодвижения типа загрузки на сервер.

Вам не об этом пытались сказать, а то, что файлы хтмл "готовятся" при запросе исходя из бинарных данных, которые копятся по мере прихода новых, а не постоянное обновление хтмл-а...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, simark1979 сказал:

Хранить это дело предполагается в виде html страницы, чтобы открыв в браузере на компе можно было посмотреть данные в виде графиков.
На каждый месяц хочу иметь свой самодостаточный html (чтобы в одном документе была страница + данные)

Ну вот - как я и предполагал.... очередной самопальный деревянный конь.... :unknw:   Объясните нам - зачем тут запись в середину файла???

Функция printf() спасёт отца русской демократии. И сделает ваши записи в файл простыми и последовательными... :wink2:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Данные храните структурированно в текстовом файле. Потом пишете утилитку на стороне компа которая легким движением руки представляет ваши данные хоть в html хоть где угодно. я так делал когда то.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 3/26/2019 at 8:10 PM, jcxz said:

Ну вот - как я и предполагал.... очередной самопальный деревянный конь.... :unknw:   Объясните нам - зачем тут запись в середину файла???

Функция printf() спасёт отца русской демократии. И сделает ваши записи в файл простыми и последовательными... :wink2:

Не знаю, это ли вы имели ввиду....можно так:
Выставил указатель перед статичным хвостом, вписал новые данные и хвост.
Спасибо за наводку!

10 minutes ago, jenya7 said:

Данные храните структурированно в текстовом файле. Потом пишете утилитку на стороне компа которая легким движением руки представляет ваши данные хоть в html хоть где угодно. я так делал когда то.

Повторюсь, расчёт на пользователей, которые ничего не должны скачивать.

Изменено пользователем simark1979

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

11 minutes ago, simark1979 said:

Мля, точно!
отступил немного назад и вписал новые данные + хвост.
Спасибо!

Повторюсь, расчёт на пользователей, которые ничего не должны скачивать.

добавляйте теги на лету. так я тоже делал. код правда для си-шарп но можно переделать на си.

Spoiler

private const string IMG = "<img src='C:\\Images\\ate small.bmp'></img><!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 3.2//EN\">";
        private const string HEAD = "<HEAD> <META HTTP-EQUIV=\"Content-Type\" Content=\"text/html; charset=iso-8859-1\"> <TITLE>Report</TITLE></HEAD>";
        private const string DOC_TITLE = "<FONT FACE=VERDANA><a name=\"-1-2012-9-6-9-38-33-953\"></a><H3>UUT Report</H3><H4>";
        //GLOBAL DATA SECTION
        private const string GLOBSECT_TABLE_START = "<TABLE BORDERCOLOR=#000000 WIDTH=70% FRAME=VOID><TBODY>";
        private const string GLOBSECT_ROW_START = "<TR><TD NOWRAP='NOWRAP'><B><LI>";
        private const string GLOBSECT_ROW_MID = "</B><TD><B>";
        private const string ROW_END = "</B>";
        private const string UUT_RESULT_PASSED = "<TR><TD NOWRAP='NOWRAP'><B><LI>UUT Result: </B><TD><B><FONT COLOR=#008000>Passed</FONT></B>";
        private const string UUT_RESULT_FAILED = "<TR><TD NOWRAP='NOWRAP'><B><LI>UUT Result: </B><TD><B><FONT COLOR=#FF0000>Failed</FONT></B>";
        private const string GLOBSECT_TABLE_END = "</TBODY></TABLE><BR></H4><HR SIZE=3 COLOR=#8000CC ALIGN=LEFT WIDTH=50%>";
       
        private const string SPLITER = "<BLOCKQUOTE>";

        private const string SEQ_BEGIN = "<H5><NOBR>Begin Sequence: MainSequence ";
        private const string SEQ_NAME_START = "<BR>";
        private const string SEQ_NAME_END = "<BR></NOBR></H5>";

        private const string MAIN_TABLE_START = "<table BORDERCOLOR=#000000 FRAME=BOX RULES=ALL WIDTH=70%><TBODY>";

        //STEP SECTION
        private const string STEP_ROW_START1 = "<TR><TD BGCOLOR=#FFFFFF valign=\"top\"><FONT SIZE=-1>";
        private const string STEP_ROW_START2 = "<TR><TD COLSPAN=2 BGCOLOR=#FFFFFF valign=\"top\"><FONT SIZE=-1>";
        private const string STEP_ROW_END =    "<TD BGCOLOR=#32FFFF WIDTH = 37% valign=\"top\"><FONT SIZE=-1>";
        private const string SYS_STEP_NAME_START = "<TR><TD COLSPAN=2 BGCOLOR=#FF8000>";
        private const string SYS_STEP_NAME_END = "<TR><TD COLSPAN = 2>";
        private const string STATUS_ROW_PASSED =  STEP_ROW_START1 + "Status:                   <TD BGCOLOR=#00FF00 WIDTH = 37% valign=\"top\"><FONT SIZE=-1>Passed";
        private const string STATUS_ROW_DONE =    STEP_ROW_START1 + "Status:                   <TD BGCOLOR=#00FFCC WIDTH = 37% valign=\"top\"><FONT SIZE=-1>Done";
        private const string STATUS_ROW_SKIPED =  STEP_ROW_START1 + "Status:                   <TD BGCOLOR=#FFFF00 WIDTH = 37% valign=\"top\"><FONT SIZE=-1>Skipped";
        private const string STATUS_ROW_FAILED =  STEP_ROW_START1 + "Status:                   <TD BGCOLOR=#FF0000 WIDTH = 37% valign=\"top\"><FONT SIZE=-1>Failed";
        private const string LIMITS_ROW =         STEP_ROW_START2 + "Limits:";
        private const string LIMIT_HIGH =         STEP_ROW_START1 + "&nbsp;&nbsp;&nbsp;High:" + STEP_ROW_END;
        private const string LIMIT_LOW =          STEP_ROW_START1 + "&nbsp;&nbsp;&nbsp;Low:" + STEP_ROW_END;
        private const string MULTIMEAS_ROW =      STEP_ROW_START2 + "Measurement:";
        private const string MULTIMEAS_LIM_LOW =  STEP_ROW_START1 + "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Low:" + STEP_ROW_END;
        private const string MULTIMEAS_LIM_HIGH = STEP_ROW_START1 + "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;High:" + STEP_ROW_END;
        private const string MULTIMEAS_UNITS =    STEP_ROW_START1 + "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Units:" + STEP_ROW_END;
        private const string MULTIMEAS_COMPTYPE = STEP_ROW_START1 + "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Comparison Type:" + STEP_ROW_END;
        private const string MULTIMEAS_DATA =     STEP_ROW_START1 + "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Data:" + STEP_ROW_END;
        private const string MULTIMEAS_STATUS =   STEP_ROW_START1 + "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Status:" + STEP_ROW_END;
        private const string STR_ROW =            STEP_ROW_START1 + "String:" + STEP_ROW_END;
        private const string STR_LIM =            STEP_ROW_START1 + "&nbsp;&nbsp;&nbsp;String:" + STEP_ROW_END;
        private const string STR_COMPTYPE =       STEP_ROW_START1 + "Comparison Type:" + STEP_ROW_END;
      
        StreamWriter sr;

        //constractor
        public HTML()
        {

        }

        public HTML(string _filename)
        {
            sr = new System.IO.StreamWriter(_filename);
        }

        public bool Create(string filename)
        {
            try
            {
                File.Create(filename);
                return true;
            }
            catch
            {
                return false;
            }
        }

        public bool WriteToFile(string filename)
        {
            //if (File.Exists(filename))
            //{
                try
                {
                    //File.Open(filename, FileMode.Append, FileAccess.Write);
                    sr.WriteLine(HEAD);
                    sr.WriteLine(DOC_TITLE);
                    sr.WriteLine(GLOBSECT_TABLE_START);
                    sr.WriteLine(GLOBSECT_ROW_START + "UUT Description:  " + GLOBSECT_ROW_MID + "HPM Drive" + ROW_END);
                    sr.WriteLine(GLOBSECT_ROW_START + "Serial Number:  " + GLOBSECT_ROW_MID + "33212-01050" + ROW_END);
                    sr.WriteLine(GLOBSECT_TABLE_END);
                    sr.Close();
                    return true;
                }
                catch
                {
                    return false;
                }
            //}
            //else
            //{
                //return false;
            //}
        }

        public void WriteReportStart()
        {
            sr.WriteLine(HEAD);
            sr.WriteLine("<HTML>");
            sr.WriteLine(DOC_TITLE);
            sr.WriteLine("<BODY>");
            sr.WriteLine("<TABLE BORDERCOLOR=#000000 FRAME=BOX RULES=ALL WIDTH=70%><TBODY>");

            //sr.WriteLine(GLOBSECT_TABLE_START);
        }

        public void WriteReportEnd()
        {
            sr.WriteLine("</TABLE><BR>");
            sr.WriteLine("</FONT></BODY>");
            sr.WriteLine("</HTML>");
            sr.Close();
        }

        public void WriteGlobalInfo(string var_name, string var_data)
        {
            sr.WriteLine(GLOBSECT_ROW_START + var_name + ": " + GLOBSECT_ROW_MID + var_data + ROW_END);
        }

        public void WriteStepInfo(Test test)
        {
            //write test name
            sr.WriteLine("<TR><TD COLSPAN=2 BGCOLOR=#00C4C4>" + test.TestName);
            //write test status
            switch (test.teststatus)
            {
                case BaseTest.Status.Skipped:
                    sr.WriteLine(STATUS_ROW_SKIPED);
                    break;
                case BaseTest.Status.Done:
                    sr.WriteLine(STATUS_ROW_DONE);
                    break;
                case BaseTest.Status.Passed:
                    sr.WriteLine(STATUS_ROW_PASSED);
                    break;
                case BaseTest.Status.Failed:
                    sr.WriteLine(STATUS_ROW_FAILED);
                    break;
            }
            if (test.teststatus == BaseTest.Status.Skipped)
                return;
            //write measurement - it depends on test type
            switch (test.testtype)
            {
                case BaseTest.TestType.Numeric:
                    if (test.measurements != null)
                    {
                        sr.WriteLine(STEP_ROW_START1 + "Measurement:" + STEP_ROW_END + test.measurements[0].value.ToString());
                        if (test.measurements[0].units != null)
                            sr.WriteLine(STEP_ROW_START1 + "Units:" + STEP_ROW_END + test.measurements[0].units);
                        else
                            sr.WriteLine(STEP_ROW_START1 + "Units:" + STEP_ROW_END + "");
                        sr.WriteLine(STEP_ROW_START1 + "Limits:");
                        sr.WriteLine(STEP_ROW_START1 + "&nbsp;&nbsp;&nbsp;Low:" + STEP_ROW_END + test.measurements[0].min_lim);
                        sr.WriteLine(STEP_ROW_START1 + "&nbsp;&nbsp;&nbsp;High:" + STEP_ROW_END + test.measurements[0].max_lim);
                        sr.WriteLine(STEP_ROW_START1 + "Comparison Type:" + STEP_ROW_END + test.measurements[0].comp_type); 
                    }
                    else
                        sr.WriteLine(STEP_ROW_START1 + "Measurement:" + STEP_ROW_END + "NAN");
                    break;
                case BaseTest.TestType.MultiNumeric:
                    sr.WriteLine(MULTIMEAS_ROW);
                    if (test.measurements != null && test.measurements.Length > 1)
                    {
                        sr.WriteLine(STEP_ROW_START1 + "Measurement:");
                        for (int i = 0; i < test.measurements.Length; i++)
                        {
                            sr.WriteLine(STEP_ROW_START1 + "&nbsp;&nbsp;&nbsp;Measurement" + "[" + i.ToString() + "]  " + test.measurements[i].meas_name);
                            sr.WriteLine(LIMITS_ROW);
                            sr.WriteLine(MULTIMEAS_LIM_LOW + test.measurements[i].min_lim);
                            //TBD - if comparison type GELE... 
                            sr.WriteLine(MULTIMEAS_LIM_HIGH + test.measurements[i].max_lim);
                            if (test.measurements[0].units != null)
                                sr.WriteLine(MULTIMEAS_UNITS + test.measurements[0].units);
                            else
                                sr.WriteLine(MULTIMEAS_UNITS + "");
                            sr.WriteLine(MULTIMEAS_COMPTYPE + test.measurements[0].comp_type);
                            sr.WriteLine(MULTIMEAS_DATA + test.measurements[0].value);
                            sr.WriteLine(MULTIMEAS_STATUS + test.measurements[0].status);
                        }
                    }
                    break;
                case BaseTest.TestType.String:
                    sr.WriteLine(STR_ROW + test.measurements[0].value);
                    sr.WriteLine(LIMITS_ROW);
                    sr.WriteLine(STR_LIM + test.measurements[0].min_lim);
                    sr.WriteLine(STR_COMPTYPE + test.measurements[0].comp_type );
                    break;
            }
            //write additional results
            if (test.AdditiobalResults != null)
            {
                for (int i = 0; i < test.AdditiobalResults.Length; i++)
                    sr.WriteLine(STEP_ROW_START1 + "name: " + STEP_ROW_END + "data");
            }
            //write test time  
            sr.WriteLine(STEP_ROW_START1 + "Module Time:              " + STEP_ROW_END);             
        }

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 minute ago, jenya7 said:

добавляйте теги на лету. так я тоже делал. код правда для си-шарп но можно переделать на си.

  Reveal hidden contents


private const string IMG = "<img src='C:\\Images\\ate small.bmp'></img><!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 3.2//EN\">";
        private const string HEAD = "<HEAD> <META HTTP-EQUIV=\"Content-Type\" Content=\"text/html; charset=iso-8859-1\"> <TITLE>Report</TITLE></HEAD>";
        private const string DOC_TITLE = "<FONT FACE=VERDANA><a name=\"-1-2012-9-6-9-38-33-953\"></a><H3>UUT Report</H3><H4>";
        //GLOBAL DATA SECTION
        private const string GLOBSECT_TABLE_START = "<TABLE BORDERCOLOR=#000000 WIDTH=70% FRAME=VOID><TBODY>";
        private const string GLOBSECT_ROW_START = "<TR><TD NOWRAP='NOWRAP'><B><LI>";
        private const string GLOBSECT_ROW_MID = "</B><TD><B>";
        private const string ROW_END = "</B>";
        private const string UUT_RESULT_PASSED = "<TR><TD NOWRAP='NOWRAP'><B><LI>UUT Result: </B><TD><B><FONT COLOR=#008000>Passed</FONT></B>";
        private const string UUT_RESULT_FAILED = "<TR><TD NOWRAP='NOWRAP'><B><LI>UUT Result: </B><TD><B><FONT COLOR=#FF0000>Failed</FONT></B>";
        private const string GLOBSECT_TABLE_END = "</TBODY></TABLE><BR></H4><HR SIZE=3 COLOR=#8000CC ALIGN=LEFT WIDTH=50%>";
       
        private const string SPLITER = "<BLOCKQUOTE>";

        private const string SEQ_BEGIN = "<H5><NOBR>Begin Sequence: MainSequence ";
        private const string SEQ_NAME_START = "<BR>";
        private const string SEQ_NAME_END = "<BR></NOBR></H5>";

        private const string MAIN_TABLE_START = "<table BORDERCOLOR=#000000 FRAME=BOX RULES=ALL WIDTH=70%><TBODY>";

        //STEP SECTION
        private const string STEP_ROW_START1 = "<TR><TD BGCOLOR=#FFFFFF valign=\"top\"><FONT SIZE=-1>";
        private const string STEP_ROW_START2 = "<TR><TD COLSPAN=2 BGCOLOR=#FFFFFF valign=\"top\"><FONT SIZE=-1>";
        private const string STEP_ROW_END =    "<TD BGCOLOR=#32FFFF WIDTH = 37% valign=\"top\"><FONT SIZE=-1>";
        private const string SYS_STEP_NAME_START = "<TR><TD COLSPAN=2 BGCOLOR=#FF8000>";
        private const string SYS_STEP_NAME_END = "<TR><TD COLSPAN = 2>";
        private const string STATUS_ROW_PASSED =  STEP_ROW_START1 + "Status:                   <TD BGCOLOR=#00FF00 WIDTH = 37% valign=\"top\"><FONT SIZE=-1>Passed";
        private const string STATUS_ROW_DONE =    STEP_ROW_START1 + "Status:                   <TD BGCOLOR=#00FFCC WIDTH = 37% valign=\"top\"><FONT SIZE=-1>Done";
        private const string STATUS_ROW_SKIPED =  STEP_ROW_START1 + "Status:                   <TD BGCOLOR=#FFFF00 WIDTH = 37% valign=\"top\"><FONT SIZE=-1>Skipped";
        private const string STATUS_ROW_FAILED =  STEP_ROW_START1 + "Status:                   <TD BGCOLOR=#FF0000 WIDTH = 37% valign=\"top\"><FONT SIZE=-1>Failed";
        private const string LIMITS_ROW =         STEP_ROW_START2 + "Limits:";
        private const string LIMIT_HIGH =         STEP_ROW_START1 + "&nbsp;&nbsp;&nbsp;High:" + STEP_ROW_END;
        private const string LIMIT_LOW =          STEP_ROW_START1 + "&nbsp;&nbsp;&nbsp;Low:" + STEP_ROW_END;
        private const string MULTIMEAS_ROW =      STEP_ROW_START2 + "Measurement:";
        private const string MULTIMEAS_LIM_LOW =  STEP_ROW_START1 + "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Low:" + STEP_ROW_END;
        private const string MULTIMEAS_LIM_HIGH = STEP_ROW_START1 + "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;High:" + STEP_ROW_END;
        private const string MULTIMEAS_UNITS =    STEP_ROW_START1 + "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Units:" + STEP_ROW_END;
        private const string MULTIMEAS_COMPTYPE = STEP_ROW_START1 + "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Comparison Type:" + STEP_ROW_END;
        private const string MULTIMEAS_DATA =     STEP_ROW_START1 + "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Data:" + STEP_ROW_END;
        private const string MULTIMEAS_STATUS =   STEP_ROW_START1 + "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Status:" + STEP_ROW_END;
        private const string STR_ROW =            STEP_ROW_START1 + "String:" + STEP_ROW_END;
        private const string STR_LIM =            STEP_ROW_START1 + "&nbsp;&nbsp;&nbsp;String:" + STEP_ROW_END;
        private const string STR_COMPTYPE =       STEP_ROW_START1 + "Comparison Type:" + STEP_ROW_END;
      
        StreamWriter sr;

        //constractor
        public HTML()
        {

        }

        public HTML(string _filename)
        {
            sr = new System.IO.StreamWriter(_filename);
        }

        public bool Create(string filename)
        {
            try
            {
                File.Create(filename);
                return true;
            }
            catch
            {
                return false;
            }
        }

        public bool WriteToFile(string filename)
        {
            //if (File.Exists(filename))
            //{
                try
                {
                    //File.Open(filename, FileMode.Append, FileAccess.Write);
                    sr.WriteLine(HEAD);
                    sr.WriteLine(DOC_TITLE);
                    sr.WriteLine(GLOBSECT_TABLE_START);
                    sr.WriteLine(GLOBSECT_ROW_START + "UUT Description:  " + GLOBSECT_ROW_MID + "HPM Drive" + ROW_END);
                    sr.WriteLine(GLOBSECT_ROW_START + "Serial Number:  " + GLOBSECT_ROW_MID + "33212-01050" + ROW_END);
                    sr.WriteLine(GLOBSECT_TABLE_END);
                    sr.Close();
                    return true;
                }
                catch
                {
                    return false;
                }
            //}
            //else
            //{
                //return false;
            //}
        }

        public void WriteReportStart()
        {
            sr.WriteLine(HEAD);
            sr.WriteLine("<HTML>");
            sr.WriteLine(DOC_TITLE);
            sr.WriteLine("<BODY>");
            sr.WriteLine("<TABLE BORDERCOLOR=#000000 FRAME=BOX RULES=ALL WIDTH=70%><TBODY>");

            //sr.WriteLine(GLOBSECT_TABLE_START);
        }

        public void WriteReportEnd()
        {
            sr.WriteLine("</TABLE><BR>");
            sr.WriteLine("</FONT></BODY>");
            sr.WriteLine("</HTML>");
            sr.Close();
        }

        public void WriteGlobalInfo(string var_name, string var_data)
        {
            sr.WriteLine(GLOBSECT_ROW_START + var_name + ": " + GLOBSECT_ROW_MID + var_data + ROW_END);
        }

        public void WriteStepInfo(Test test)
        {
            //write test name
            sr.WriteLine("<TR><TD COLSPAN=2 BGCOLOR=#00C4C4>" + test.TestName);
            //write test status
            switch (test.teststatus)
            {
                case BaseTest.Status.Skipped:
                    sr.WriteLine(STATUS_ROW_SKIPED);
                    break;
                case BaseTest.Status.Done:
                    sr.WriteLine(STATUS_ROW_DONE);
                    break;
                case BaseTest.Status.Passed:
                    sr.WriteLine(STATUS_ROW_PASSED);
                    break;
                case BaseTest.Status.Failed:
                    sr.WriteLine(STATUS_ROW_FAILED);
                    break;
            }
            if (test.teststatus == BaseTest.Status.Skipped)
                return;
            //write measurement - it depends on test type
            switch (test.testtype)
            {
                case BaseTest.TestType.Numeric:
                    if (test.measurements != null)
                    {
                        sr.WriteLine(STEP_ROW_START1 + "Measurement:" + STEP_ROW_END + test.measurements[0].value.ToString());
                        if (test.measurements[0].units != null)
                            sr.WriteLine(STEP_ROW_START1 + "Units:" + STEP_ROW_END + test.measurements[0].units);
                        else
                            sr.WriteLine(STEP_ROW_START1 + "Units:" + STEP_ROW_END + "");
                        sr.WriteLine(STEP_ROW_START1 + "Limits:");
                        sr.WriteLine(STEP_ROW_START1 + "&nbsp;&nbsp;&nbsp;Low:" + STEP_ROW_END + test.measurements[0].min_lim);
                        sr.WriteLine(STEP_ROW_START1 + "&nbsp;&nbsp;&nbsp;High:" + STEP_ROW_END + test.measurements[0].max_lim);
                        sr.WriteLine(STEP_ROW_START1 + "Comparison Type:" + STEP_ROW_END + test.measurements[0].comp_type); 
                    }
                    else
                        sr.WriteLine(STEP_ROW_START1 + "Measurement:" + STEP_ROW_END + "NAN");
                    break;
                case BaseTest.TestType.MultiNumeric:
                    sr.WriteLine(MULTIMEAS_ROW);
                    if (test.measurements != null && test.measurements.Length > 1)
                    {
                        sr.WriteLine(STEP_ROW_START1 + "Measurement:");
                        for (int i = 0; i < test.measurements.Length; i++)
                        {
                            sr.WriteLine(STEP_ROW_START1 + "&nbsp;&nbsp;&nbsp;Measurement" + "[" + i.ToString() + "]  " + test.measurements[i].meas_name);
                            sr.WriteLine(LIMITS_ROW);
                            sr.WriteLine(MULTIMEAS_LIM_LOW + test.measurements[i].min_lim);
                            //TBD - if comparison type GELE... 
                            sr.WriteLine(MULTIMEAS_LIM_HIGH + test.measurements[i].max_lim);
                            if (test.measurements[0].units != null)
                                sr.WriteLine(MULTIMEAS_UNITS + test.measurements[0].units);
                            else
                                sr.WriteLine(MULTIMEAS_UNITS + "");
                            sr.WriteLine(MULTIMEAS_COMPTYPE + test.measurements[0].comp_type);
                            sr.WriteLine(MULTIMEAS_DATA + test.measurements[0].value);
                            sr.WriteLine(MULTIMEAS_STATUS + test.measurements[0].status);
                        }
                    }
                    break;
                case BaseTest.TestType.String:
                    sr.WriteLine(STR_ROW + test.measurements[0].value);
                    sr.WriteLine(LIMITS_ROW);
                    sr.WriteLine(STR_LIM + test.measurements[0].min_lim);
                    sr.WriteLine(STR_COMPTYPE + test.measurements[0].comp_type );
                    break;
            }
            //write additional results
            if (test.AdditiobalResults != null)
            {
                for (int i = 0; i < test.AdditiobalResults.Length; i++)
                    sr.WriteLine(STEP_ROW_START1 + "name: " + STEP_ROW_END + "data");
            }
            //write test time  
            sr.WriteLine(STEP_ROW_START1 + "Module Time:              " + STEP_ROW_END);             
        }

 

 

Так и сделаю, спасибо!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, simark1979 сказал:

Не знаю, это ли вы имели ввиду....можно так:
Выставил указатель перед статичным хвостом, вписал новые данные и хвост.

Ну как что: в тех местах HTML, где надо впечатывать беззнаковые числа вставить "%u", где строки - "%s", и так далее. Потом скормить весь этот HTML printf-у как строку, добавив соответствующие аргументы.

Я не знаю формата HTML - если по его формату нельзя вставить такие управляющие последовательности printf (из-за конфликтов с командами форматной строки printf), то вставить другие маркеры. Когда же нужно распечатать страницу - делаем поиск очередного маркера, печатаем в printf содержимое куска HTML от текущей позиции до маркера, далее - печатаем нужное значение, дальше - ищем следующий маркер и так далее - до конца HTML.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 hours ago, jcxz said:

Ну как что: в тех местах HTML, где надо впечатывать беззнаковые числа вставить "%u", где строки - "%s", и так далее. Потом скормить весь этот HTML printf-у как строку, добавив соответствующие аргументы.

Я не знаю формата HTML - если по его формату нельзя вставить такие управляющие последовательности printf (из-за конфликтов с командами форматной строки printf), то вставить другие маркеры. Когда же нужно распечатать страницу - делаем поиск очередного маркера, печатаем в printf содержимое куска HTML от текущей позиции до маркера, далее - печатаем нужное значение, дальше - ищем следующий маркер и так далее - до конца HTML.

Всё гораздо проще.

Есть html файл, который я цепляю линкером к прошивке

Далее создаю файл-шаблон html (данные беру из секции, куда линкер запихал html файл)
<html>
<body>
...................
..................
    <script>
    ......................
    const MONTH_DATA = [
         21.04.19 14:07:03;cl_pump;0
         21.04.19 14:07:03;water_ph;8.5
         21.04.19 14:07:04;water_ph;8.2
         21.04.19 14:07:04;water_stream;1
         21.04.19 14:07:05;cl_pump;1
->      место для новых данных
    ];
    ......................
    </script>
</body>
</html>

Отступ с конца файла, куда я должен дописывать новые данные, всегда один и тот же.

Собственно всё.
1. Открыл файл
2. Выставил указатель на место для новых данных (конец файла - const_отступ_снизу)
3. Записал новые данные
4. Прицепил хвост.
5. Закрыл файл.




 

Изменено пользователем simark1979

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...