Конференция ".Net" » Строки/текст в c# [C#, WinXP]
 
  • Галинка © (25.01.07 16:19) [0]
    Надо из XML-файла определенного формата с определенной схемой получить исходники .cpp & .h. Вроде тект получается. Но от оригинального отличается наличием разных "служебных" символов. Можно ли это как-то исправить?

    Код следующий:
               if (curDoc == null) return;
               string cppText =   "#include \"StdAfx.h\"\r\n" +
                                  "#include \"StringTable.h\"\r\n\r\n" +
                                  "CStringTable::CStringTable(void)\r\n" +
                                  "{\r\n" +
                                  "}
    \r\n\r\n" +
                                  "CStringTable::~CStringTable(void)\r\n" +
                                  "{\r\n" +
                                  "}
    \r\n\r\n" +
                                  "// MODELLPARAMETER\r\n\r\n";

               string hText = "#pragma once\r\n\r\n" +
                              "#define CHANNEL_NAME_LENGTH     12\r\n" +
                              "#define CHANNEL_UNIT_LENGTH     8\r\n\r\n" +
                              "typedef char ch_name[CHANNEL_NAME_LENGTH];\r\n" +
                              "typedef char ch_unit[CHANNEL_UNIT_LENGTH];\r\n\r\n" +
                              "class SChannel\r\n" +
                              "{\r\n" +
                              "public:\r\n" +
                              "    ch_name asName;\r\n" +
                              "    ch_unit asUnit;\r\n" +
                              "}
    ;\r\n\r\n" +
                              "class CStringTable\r\n" +
                              "{\r\n" +
                              "public:\r\n" +
                              "    CStringTable(void);\r\n" +
                              "    ~CStringTable(void);\r\n\r\n" +
                              "// MODELLPARAMETER\r\n\r\n";

               foreach (XmlNode BausteinNode in curDoc.SelectSingleNode("descendant::Kanaele").ChildNodes)
               {
                   if (BausteinNode.Name == "Waermetauscher")
                   {
                       hText = hText + "//BAUSTEINE \r\n\r\n";
                       cppText = cppText + "//BAUSTEINE\r\n\r\n";
                   }

                   foreach (XmlNode KanalFamNode in BausteinNode.ChildNodes)
                   {
                       hText = hText + "    static int i" + KanalFamNode.Name + BausteinNode.Name + ";\r\n";
                       hText = hText + "    static SChannel a" + KanalFamNode.Name + BausteinNode.Name + "[];\r\n\r\n";

                       cppText = cppText + "int CStringTable::i" + KanalFamNode.Name + BausteinNode.Name + " = " + KanalFamNode.ChildNodes.Count.ToString() + ";\r\n";
                       cppText = cppText + "SChannel CStringTable::a" + KanalFamNode.Name + BausteinNode.Name + "[]";
                       if (KanalFamNode.HasChildNodes)
                       {
                           cppText = cppText + " = \r\n{\r\n";
                           foreach (XmlNode KanalNode in KanalFamNode.ChildNodes)
                           {
                               string curKanal = "{\"" + KanalNode.SelectSingleNode("descendant::Name").InnerText +
                                                   "\", \"" + KanalNode.SelectSingleNode("descendant::Einheit").InnerText +
                                                   "\"}
    ";
                               if (KanalNode.SelectSingleNode("descendant::ID").InnerText != KanalFamNode.ChildNodes.Count.ToString()) curKanal = curKanal + ",\r\n";
                               cppText = cppText + curKanal;
                           }
                           cppText = cppText + "\r\n};\r\n\r\n";
                       }
                       else cppText = cppText + ";\r\n\r\n";
                   }
               }

               cppText = cppText + "\r\n};";
               richTextBox2.Text = cppText;
               hText = hText + "\r\n};";
               richTextBox3.Text = hText;



    В тексте видны все \t, \par, \font и т.д. Как их убрать?
  • Галинка © (25.01.07 16:23) [1]
    А вот что получается:
    {\rtf1\ansi\deff0{\fonttbl{\f0\fnil\fcharset204 Microsoft Sans Serif;}{\f1\fnil\fcharset0 Microsoft Sans Serif;}}
    \viewkind4\uc1\pard\lang1049\f0\fs17 #include "StdAfx.h"\par
    #include "StringTable.h"\par
    \par
    CStringTable::CStringTable(void)\par
    \{\par
    \}
    \par
    \par
    CStringTable::~CStringTable(void)\par
    \{\par
    \}
    \par
    \par
    // MODELLPARAMETER\par
    \par
    int CStringTable::iEingangAspKonstanteKurve = 1;\par
    SChannel CStringTable::aEingangAspKonstanteKurve[] = \par
    \{\par
    \{"y", "-"\}
    \par
    \};\par
    \par
    int CStringTable::iEingangAspLineareKurve = 0;\par
    SChannel CStringTable::aEingangAspLineareKurve[];\par
    \par
    int CStringTable::iEingangAspVibeKurve = 4;\par
    SChannel CStringTable::aEingangAspVibeKurve[] = \par
    \{\par
    \{"phi_0", "\f1\'b0\"\}
    ,\par
    \{\"delta_phi\", \"\'b0"\}
    ,\par
    \{"m", "-"\},\par
    \{"a", "-"\}\par
    \};\par
    \par
    int CStringTable::iEingangAspDoppelVibeKurve = 7;\par
    SChannel CStringTable::aEingangAspDoppelVibeKurve[] = \par
    \{\par
    \{"phi_0", "\'b0\"\}
    ,\par
    \{\"delta_phi_a\", \"\'b0"\}
    ,\par
    \{"delta_phi_b", "\'b0\"\},\par
    \{\"m_a\", \"-\"\},\par
    \{\"m_b\", \"-\"\},\par
    \{\"a\", \"-\"\},\par
    \{\"X_a\", \"-\"\}\par
    \};\par
    \par
    int CStringTable::iEingangAspHubKurve = 3;\par
    SChannel CStringTable::aEingangAspHubKurve[] = \par
    \{\par
    \{\"phi_0\", \"\'
    b0"\}
    ,\par
    \{"delta_phi", "\'b0\"\},\par
    \{\"h_max\", \"-\"\}\par
    \};\par
    \par
    int CStringTable::iEingangAspKurbelTrieb = 3;\par
    SChannel CStringTable::aEingangAspKurbelTrieb[] = \par
    \{\par
    \{\"D\", \"mm\"\}
    ,\par
    \{\"H\", \"mm\"\},\par
    \{\"epsilon\", \"-\"\}\par
    \};\par
    \par
    //BAUSTEINE\par
    \par
    int CStringTable::iEingangAspWaermetauscher = 3;\par
    SChannel CStringTable::aEingangAspWaermetauscher[] = \par
    \{\par
    \{\"T_c_in\", \"K\"\}
    ,\par
    \{\"k_wall\", \"m^2*K/W\"\},\par
    \{\"dm_c\", \"kg/s\"\}\par
    \};\par
    \par
    int CStringTable::iAusgangAspWaermetauscher = 0;\par
    SChannel CStringTable::aAusgangAspWaermetauscher[];\par
    \par
    int CStringTable::iAusgangKwWaermetauscher = 5;\par
    SChannel CStringTable::aAusgangKwWaermetauscher[] = \par
    \{\par
    \{\"dm_h\", \"kg_s\"\}
    ,\par
    \{\"T_c_out\", \"K\"\},\par
    \{\"T_h_out\", \"K\"\},\par
    \{\"eta_HE\", \"-\"\},\par
    \{\"dQ\", \"W\"\}\par
    \};\par
    \par
    int CStringTable::iEingangAspBehaelter = 0;\par
    SChannel CStringTable::aEingangAspBehaelter[];\par
    \par
    int CStringTable::iAusgangAspBehaelter = 3;\par
    SChannel CStringTable::aAusgangAspBehaelter[] = \par
    \{\par
    \{\"p_mean\", \"bar\"\}
    ,\par
    \{\"T_mean\", \"K\"\},\par
    \{\"Q_b\", \"kW\"\}\par
    \};\par
    \par
    int CStringTable::iAusgangKwBehaelter = 2;\par
    SChannel CStringTable::aAusgangKwBehaelter[] = \par
    \{\par
    \{\"p\", \"bar\"\}
    ,\par
    \{\"eps_V\", \"ppm\"\},\par
    \par
    \};\par
    \par
    int CStringTable::iEingangAspGasZone = 0;\par
    SChannel CStringTable::aEingangAspGasZone[];\par
    \par
    int CStringTable::iAusgangAspGasZone = 3;\par
    SChannel CStringTable::aAusgangAspGasZone[] = \par
    \{\par
    \{\"p_end\", \"bar\"\}
    ,\par
    \{\"T_end\", \"K\"\},\par
    \{\"Q_b\", \"kW\"\}\par
    \};\par
    \par
    int CStringTable::iAusgangKwGasZone = 6;\par
    SChannel CStringTable::aAusgangKwGasZone[] = \par
    \{\par
    \{\"T\", \"K\"\}
    ,\par
    \{\"p\", \"bar\"\},\par
    \{\"V\", \"l\"\},\par
    \{\"m\", \"g\"\},\par
    \{\"lambda\", \"-\"\},\par
    \{\"R\", \"J/kgK\"\}\par
    \};\par
    \par
    int CStringTable::iEingangAspDrossel = 1;\par
    SChannel CStringTable::aEingangAspDrossel[] = \par
    \{\par
    \{\"A_eff\", \"mm^2\"\}
    \par
    \};\par
    \par
    int CStringTable::iAusgangAspDrossel = 0;\par
    SChannel CStringTable::aAusgangAspDrossel[];\par
    \par
    int CStringTable::iAusgangKwDrossel = 2;\par
    SChannel CStringTable::aAusgangKwDrossel[] = \par
    \{\par
    \{\"dm\", \"kg_s\"\}
    ,\par
    \{\"Pi\", \"-\"\}\par
    \};\par
    \par
    int CStringTable::iEingangAspFreieWelle = 1;\par
    SChannel CStringTable::aEingangAspFreieWelle[] = \par
    \{\par
    \{\"Theta\", \"kgm^2\"\}
    \par
    \};\par
    \par
    int CStringTable::iAusgangAspFreieWelle = 1;\par
    SChannel CStringTable::aAusgangAspFreieWelle[] = \par
    \{\par
    \{\"n\", \"1/min\"\}
    \par
    \};\par
    \par
    int CStringTable::iAusgangKwFreieWelle = 1;\par
    SChannel CStringTable::aAusgangKwFreieWelle[] = \par
    \{\par
    \{\"n\", \"1/min\"\}
    \par
    \};\par
    \par
    int CStringTable::iEingangAspGesteuerteWelle = 1;\par
    SChannel CStringTable::aEingangAspGesteuerteWelle[] = \par
    \{\par
    \{\"n\", \"1/min\"\}
    \par
    \};\par
    \par
    int CStringTable::iAusgangAspGesteuerteWelle = 2;\par
    SChannel CStringTable::aAusgangAspGesteuerteWelle[] = \par
    \{\par
    \{\"P\", \"kW\"\}
    ,\par
    \{\"M_d\", \"Nm\"\}\par
    \};\par
    \par
    int CStringTable::iEingangAspZylinder = 1;\par
    SChannel CStringTable::aEingangAspZylinder[] = \par
    \{\par
    \{\"m_fuel\", \"g\"\}
    \par
    \};\par
    \par
    int CStringTable::iAusgangAspZylinder = 17;\par
    SChannel CStringTable::aAusgangAspZylinder[] = \par
    \{\par
    \{\"p_mi\", \"bar\"\}
    ,\par
    \{\"P_i\", \"kW\"\},\par
    \{\"Q_b\", \"kW\"\},\par
    \{\"Q_w\", \"kW\"\},\par
    \{\"b_i\", \"g/kWh\"\},\par
    \{\"eta_i\", \"%\"\},\par
    \{\"p_max\", \"bar\"\},\par
    \{\"phi_p_max\", \"\'b0"\}
    ,\par
    \{"T_max", "K"\},\par
    \{"phi_T_max", "\'b0\"\},\par
    \{\"phi_X02\", \"\'b0"\}
    ,\par
    \{"phi_X05", "\'b0\"\},\par
    \{\"phi_X50\", \"\'b0"\}
    ,\par
    \{"phi_X95", "\'b0\"\},\par
    \{\"phi_X98\", \"\'b0"\}
    ,\par
    \{"m_HpcStart", "g"\},\par
    \{"lambda_E0", "-"\}\par
    \};\par
    \par
    int CStringTable::iEingangAspTurbomaschine = 2;\par
    SChannel CStringTable::aEingangAspTurbomaschine[] = \par
    \{\par
    \{"f_Pi", "-"\}
    ,\par
    \{"f_Fluss", "-"\}\par
    \};\par
    \par
    int CStringTable::iAusgangAspTurbomaschine = 0;\par
    SChannel CStringTable::aAusgangAspTurbomaschine[];\par
    \par
    int CStringTable::iAusgangKwTurbomaschine = 7;\par
    SChannel CStringTable::aAusgangKwTurbomaschine[] = \par
    \{\par
    \{"Pi", "-"\}
    ,\par
    \{"dm", "kg/s"\},\par
    \{"T_in", "K"\},\par
    \{"T_out", "K"\},\par
    \{"eta_is", "-"\},\par
    \{"n", "1/min"\},\par
    \{"E_Welle", "kJ"\}\par
    \};\par
    \par
    \par
    \};\f0\par
    }

  • JFK&MM_extramarital_son (25.01.07 17:08) [2]
    В тексте видны все \t, \par, \font и т.д. Как их убрать?

    Если они на самом деле внутри значений узлов и атрибутов (то есть это не косяк с чтением xml), то регулярными выражениями убить их думаю будет очень легко.
  • DiamondShark © (25.01.07 17:10) [3]

    >richTextBox2.Text = cppText;
    >...
    > richTextBox3.Text = hText;


    richTextBox2.Rtf = cppText;
    ...
    richTextBox3.Rtf = hText;

    ?
  • Галинка © (25.01.07 17:10) [4]
    нашла... надо писать в файл верез файловые операции (в моем случае я пишу через StreamWriter) а не richTextBox.SaveFile(path).
  • Галинка © (25.01.07 17:13) [5]
    DiamondShark ©   (25.01.07 17:10) [3]

    не работает. Неверный формат данных ((

    JFK&MM_extramarital_son   (25.01.07 17:08) [2]

    с чтением хмл это не имеет связи, я так думаю. Это добавляется в период формирования строки ((
  • Игорь Шевченко © (25.01.07 17:14) [6]
    не использовать richtextbox ?
  • Галинка © (25.01.07 17:16) [7]
    Игорь Шевченко ©   (25.01.07 17:14) [6]

    а что использовать? пользователь же должен видеть, что получилось ))
  • DiamondShark © (25.01.07 17:18) [8]
    TextBox использовать.

    И в заблуждение не надо вводить. В исходном вопросе ни слова про запись в файл не было.
  • logic (25.01.07 17:24) [9]
    richTextBox2.SaveFile(@"d:\1.txt", RichTextBoxStreamType.PlainText);
    ?
  • Галинка © (26.01.07 11:58) [10]
    DiamondShark ©   (25.01.07 17:18) [8]

    а вот это "Надо из XML-файла определенного формата с определенной схемой получить исходники .cpp & .h.". Т.е. из ФАЙЛА с расширением .xml, надо получить ДВА с расширениями .cpp & .h.

    короче потоки рулят ))
 
Конференция ".Net" » Строки/текст в c# [C#, WinXP]
Есть новые Нет новых   [134427   +38][b:0][p:0.006]