从超大html表单提取标题和input的属性,以及在input特定属性前插入内容

  • 编程时遇到需要从超大html表单(标题和input成对)中提取“标题和input中的ref值”,以及在input特定属性前插入内容,特写下面两个方法,避免重复劳动。
static void Main(string[] args)
{
	 ReadTxt();
	InsertText();
}

/// <summary>
/// html页面有一个很大表单(标题和input成对),本方法实现:提取标题和input的ref属性放到List集合中,并转成可贴到Excel格式
/// 【实现思路】 分析html源码,找规律,然后不断替换,直到数据清洗干净,可以轻松通过截取得到想要的值。
/// </summary>
/// <param name="Path">文件地址</param>
public static void ReadTxt()
{ 
	string Path = @"D:DiagnosisInfo.html";
	StreamReader sr = new StreamReader(Path, Encoding.UTF8);
	string content; 
	List<string> list = new List<string>();
	string[] pair = new string[2];
	while ((content = sr.ReadLine()) != null)
	{
		string line = content.ToString()
			.Replace(""", "")
			.Replace("'", "")
			.Replace(">", "") 
			.Replace(" style= 80px", "") 
			.Replace(" style=", "	") 
			.Replace(" :disabled", "	") 
			.Replace("	width", "	") 
			.Replace(" size=small", "");
		if (line.IndexOf("<el-form-item") >= 0)
		{
			string[] ar = line.Replace("label=", "@").Split('@');
			string title = ar.Length >= 2 ? ar[1] : "";
			pair[0] = title;
		}
		else if (line.IndexOf("ref=") >= 0)
		{
			string model = line.Replace("ref=", "@").Split('@')[1];
			pair[1] = model;
		}
		if (!string.IsNullOrWhiteSpace(pair[0]) && !string.IsNullOrWhiteSpace(pair[1]))
		{
			list.Add(pair[0] + "	" + pair[1]);
			pair[0] = "";
			pair[1] = "";
		}
	}
	string result = string.Join("
", list);
}

/// <summary>
/// html有一个很大表单(标题和input成对),本方法实现:在input控件的“ref='控件id'”属性前面加上“ @keyup.native="JumpFocus('控件id')"”(其中“控件id”取自ref值)
/// 【思路】 分析html源码,找规律,然后用正则表达式取得各input的ref值,然后通过增量替换方式置换成自己想要的样子。
/// </summary>
private static void InsertText()
{
	string Path = @"D: DiagnosisInfo.html";
	StreamReader sr = new StreamReader(Path, Encoding.UTF8);
	string content;
	List<string> list = new List<string>();
	while ((content = sr.ReadLine()) != null)
	{
		string line = content.ToString();
		if (line.IndexOf("ref=") >= 0)
		{
			string start = "ref='";
			string end = "'";
			Regex rgx = new Regex("(?<=(" + start + "))[.\s\S]*?(?=(" + end + "))", RegexOptions.Multiline | RegexOptions.Singleline);//截取“ref='”和“'”之间的值
			string tmp = rgx.Match(line).Value;//控件id
			line = line.Replace("ref=", " @keyup.native="JumpFocus('"+tmp+"')" ref=");
		}
		list.Add(line);
	}
	string result = string.Join("",list);
}

总结

  • html或C#等编码时出现大量重复性拼接工作时,就要考虑下是否可以批量化或自动化操作。可以一类一类地操作;也可以是一列一列地操作;或借助C#强大的替换、截取、正则表达式等进行逻辑控制的自动化地操作。
  • 手头提高效率的工具有notepad++和Excel,手机QQ浏览器实用功能:翻译,图片或纸上文字转文本,搜图。搜狗输入法:图片转文字。
  • notepad++常见批量操作:把文本按规律转多列放到Excel、多行列选中、多行转一行、一行转多列、多类批量替换、同类着色或计数等。
  • Excel:对列进行首尾加入同类字符或字数+1的字符,一列一列方式批量操作,两个单元格内容比较等
  • 实战举例:编码时有大量数据库字段形如out_prof_on,怎么批量转为outProfOn(骆驼命名法)?
  • 步骤:下划线替换为“tab”键 贴到Excel copy一列到notepad++中shift+alt+选择列选中方式选中首字母 转大写(shift+ctrl+u) 贴回Excel替换其所在列, 如此反复操作其他列, 最后在notepad++中去掉所有“tab”键即可。
  • 自己体会的高效编码的几个层次
  • 工具化:借助成熟的框架或代码生成工具,生成代码。
  • 自动化:按类别或规律自己写一些简单实用的代码生成工具(可以是一个函数或一个控制台程序,多年沉淀后此类工作应该会越做越少),生成代码。
  • 批量化:借助notepad++或Excel等工具一次性或分类批量化,操作代码。
  • 体力化:最低等级,就是进行重复的体力劳动(智力不行体力补)。
原文地址:https://www.cnblogs.com/anjun-xy/p/11897695.html