• 从超大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等工具一次性或分类批量化,操作代码。
    • 体力化:最低等级,就是进行重复的体力劳动(智力不行体力补)。
  • 相关阅读:
    l1-010
    l1-009
    L1-008修改
    l1-008
    Codeforces Round #406 (Div. 2)
    求N!的长度【数学】 51nod 1058 1130
    51nod 1090 & 1267 【二分简单题】
    Codeforces Round #405 (Div. 2)
    Codeforces Round #404 (Div. 2)
    PAT 天梯赛真题集(L2、L3)
  • 原文地址:https://www.cnblogs.com/anjun-xy/p/11897695.html
Copyright © 2020-2023  润新知