读书人

用c#对字符串进行灵活的操作希望能给

发布时间: 2012-02-03 22:02:47 作者: rapoo

用c#对字符串进行灵活的操作,希望能给出思路,或者例子,非常感谢了。下面两张图片,源文件图是要操作的字符串。目标文件图是要变成的字符串。
文字示例是这样的
<TD><INPUT dataFld=SYS_DATE class=AUTO title=受理日期 dataSrc="" size=16 value={宏控件}> </TD>
变成
<TD><INPUT Onclick="auto_btn(ref_1)" id='DATA_1' name='DATA_1' DATAFLD=SYS_DATE CLASS=AUTO TITLE=受理日期 DATASRC="" SIZE=16 value='2009-2-3'><INPUT type="button" id="ref_1" style="display:none" title="重新获取系统当前值" value="刷新" border=0 onclick="document.Form1.DATA_1.value='2009-2-3'"> </TD>

整个源字符串为

<DIV style="FONT-SIZE: 26px" align=center><B>值班登记单</B></DIV><BR>
<TABLE style="TABLE-LAYOUT:fixed;BORDER-COLLAPSE:collapse" cellSpacing=0 cellPadding=4 width=600 align=center borderColor=black border=1>
<TBODY>
<TR bgColor=#ffffff>
<TD align=middle width=120 bgColor=#f3f3f3><B>受理日期</B></TD>
<TD><INPUT dataFld=SYS_DATE class=AUTO title=受理日期 dataSrc="" size=16 value={宏控件}> </TD>
<TD align=middle width=120 bgColor=#f3f3f3><B>具体时间</B></TD>
<TD><INPUT dataFld=SYS_TIME class=AUTO title=具体时间 dataSrc="" size=8 value={宏控件}> </TD></TR>
<TR bgColor=#ffffff>
<TD align=middle bgColor=#f3f3f3><B>受理人</B></TD>
<TD><INPUT dataFld=SYS_USERNAME class=AUTO title=受理人 dataSrc="" size=16 value={宏控件}> </TD>
<TD align=middle bgColor=#f3f3f3><B>受理方式</B></TD>
<TD><SELECT title=受理方式> <OPTION value=来电 selected>来电</OPTION> <OPTION value=来访>来访</OPTION> <OPTION value=来信>来信</OPTION> <OPTION value=网络>网络</OPTION></SELECT> </TD></TR>
<TR bgColor=#ffffff>
<TD align=middle bgColor=#f3f3f3><B>单位</B></TD>
<TD colSpan=3><INPUT title=单位 size=39> </TD></TR>
<TR bgColor=#ffffff>
<TD align=middle bgColor=#f3f3f3><B>电话</B></TD>
<TD><INPUT title=电话 size=16> </TD>
<TD align=middle bgColor=#f3f3f3><B>联系人</B></TD>
<TD><INPUT title=联系人 size=12> </TD></TR>
<TR bgColor=#ffffff>
<TD align=middle bgColor=#f3f3f3><B>事由</B></TD>
<TD colSpan=3><TEXTAREA title=事由 cols=51></TEXTAREA> </TD></TR>
<TR bgColor=#ffffff>
<TD align=middle bgColor=#f3f3f3><B>受理情况</B></TD>
<TD colSpan=3><TEXTAREA title=受理情况 cols=51></TEXTAREA> </TD></TR>
<TR bgColor=#ffffff>
<TD align=middle bgColor=#f3f3f3><B>督办意见</B></TD>
<TD colSpan=3><TEXTAREA title=督办意见 cols=51></TEXTAREA> </TD></TR>
<TR bgColor=#ffffff>
<TD align=middle bgColor=#f3f3f3><B>协办情况</B></TD>
<TD colSpan=3><TEXTAREA title=协办情况 rows=3 cols=51></TEXTAREA> </TD></TR></TBODY></TABLE>


要变成的字符串为

<DIV style="FONT-SIZE: 26px" align=center><B>值班登记单</B></DIV><BR>
<TABLE style="TABLE-LAYOUT:fixed;BORDER-COLLAPSE:collapse" cellSpacing=0 cellPadding=4 width=600 align=center borderColor=black border=1>
<TBODY>
<TR bgColor=#ffffff>
<TD align=middle width=120 bgColor=#f3f3f3><B>受理日期</B></TD>
<TD><INPUT Onclick="auto_btn(ref_1)" id='DATA_1' name='DATA_1' DATAFLD=SYS_DATE CLASS=AUTO TITLE=受理日期 DATASRC="" SIZE=16 value='2009-2-3'><INPUT type="button" id="ref_1" style="display:none" title="重新获取系统当前值" value="刷新" border=0 onclick="document.Form1.DATA_1.value='2009-2-3'"> </TD>


<TD align=middle width=120 bgColor=#f3f3f3><B>具体时间</B></TD>
<TD><INPUT Onclick="auto_btn(ref_2)" id='DATA_2' name='DATA_2' DATAFLD=SYS_TIME CLASS=AUTO TITLE=具体时间 DATASRC="" SIZE=8 value='7:49'><INPUT type="button" id="ref_2" style="display:none" title="重新获取系统当前值" value="刷新" border=0 onclick="document.Form1.DATA_2.value='7:49'"> </TD></TR>
<TR bgColor=#ffffff>
<TD align=middle bgColor=#f3f3f3><B>受理人</B></TD>
<TD><INPUT Onclick="auto_btn(ref_3)" id='DATA_3' name='DATA_3' DATAFLD=SYS_USERNAME CLASS=AUTO TITLE=受理人 DATASRC="" SIZE=16 value='系统管理员'><INPUT type="button" id="ref_3" style="display:none" title="重新获取系统当前值" value="刷新" border=0 onclick="document.Form1.DATA_3.value='系统管理员'"> </TD>
<TD align=middle bgColor=#f3f3f3><B>受理方式</B></TD>
<TD><SELECT id='DATA_4' name='DATA_4' TITLE=受理方式> <OPTION VALUE=来电 >来电</OPTION> <OPTION VALUE=来访>来访</OPTION> <OPTION VALUE=来信>来信</OPTION> <OPTION VALUE=网络>网络</OPTION></SELECT> </TD></TR>
<TR bgColor=#ffffff>
<TD align=middle bgColor=#f3f3f3><B>单位</B></TD>
<TD colSpan=3><INPUT id='DATA_5' name='DATA_5' TITLE=单位 SIZE=39> </TD></TR>
<TR bgColor=#ffffff>
<TD align=middle bgColor=#f3f3f3><B>电话</B></TD>
<TD><INPUT id='DATA_6' name='DATA_6' TITLE=电话 SIZE=16> </TD>
<TD align=middle bgColor=#f3f3f3><B>联系人</B></TD>
<TD><INPUT id='DATA_7' name='DATA_7' TITLE=联系人 SIZE=12> </TD></TR>
<TR bgColor=#ffffff>
<TD align=middle bgColor=#f3f3f3><B>事由</B></TD>
<TD colSpan=3><TEXTAREA id='DATA_8' name='DATA_8' TITLE=事由 COLS=51></TEXTAREA> </TD></TR>
<TR bgColor=#ffffff>
<TD align=middle bgColor=#f3f3f3><B>受理情况</B></TD>
<TD colSpan=3><TEXTAREA id='DATA_9' name='DATA_9' TITLE=受理情况 COLS=51></TEXTAREA> </TD></TR>
<TR bgColor=#ffffff>
<TD align=middle bgColor=#f3f3f3><B>督办意见</B></TD>
<TD colSpan=3><TEXTAREA readonly class=BigStatic1 id='DATA_10' name='DATA_10' TITLE=督办意见 COLS=51></TEXTAREA> </TD></TR>
<TR bgColor=#ffffff>
<TD align=middle bgColor=#f3f3f3><B>协办情况</B></TD>
<TD colSpan=3><TEXTAREA readonly class=BigStatic1 id='DATA_11' name='DATA_11' TITLE=协办情况 ROWS=3 COLS=51></TEXTAREA> </TD></TR></TBODY></TABLE>


[解决办法]
加了对SELECT和TEXTAREA的处理,用到了委托
不知道什么地方需要加readonly,楼主自己处理吧,RegReplace方法中取到的m.Value的内容就是在源字符串中依次取得的<INPUT...>或<SELECT...>或<TEXTAREA...>,具体规则楼主可以在RegReplace方法中自己实现
只是不知道这种功能为什么不操作控件,而要操作字符串

C# code
string result = Regex.Replace(yourStr, @"<(?<type>INPUT|SELECT|TEXTAREA)(?<atr>[^>]*(value=(?<vla>{宏控件}))?\s*>)", new MatchEvaluator(RegReplace), RegexOptions.IgnoreCase);richTextBox2.Text = result;int i = 0;private string RegReplace(Match m){    i++;    if (m.Groups["type"].Value.ToLower() == "input")        return "<INPUT " + " Onclick=\"auto_btn(ref_" + i + ")\"  id='DATA_" + i + "' name='DATA_" + i + "'" + m.Groups["atr"].Value + "<INPUT type=\"button\" id=\"ref_" + i + "\" style=\"display:none\" title=\"重新获取系统当前值\" value=\"刷新\" border=0 onclick=\"document.Form1.DATA_" + i + ".value='" + m.Groups["vla"].Value + "'\">";    else if (m.Groups["type"].Value.ToLower() == "select")        return "<SELECT " + "id='DATA_" + i + "' name='DATA_" + i + "' " + m.Groups["atr"].Value;    else        return "<TEXTAREA " + "id='DATA_" + i + "' name='DATA_" + i + "' " + m.Groups["atr"].Value;} 


[解决办法]

探讨
再问您个正则表达式的问题吧,是一个字符串替换
<TABLE style="TABLE-LAYOUT:fixed;BORDER-COLLAPSE:collapse" cellSpacing=0 cellPadding=4 width=600 align=center borderColor=black border=1>
把上面的字符串替换成 <TABLE >

读书人网 >C#

热点推荐