• 生活经历的意义,是为了引导你,而非定义你。

  • 外卖,购物,看电影,打车都可以领劵

  • 人生在世最重要的是独立支撑,在物质上独立支撑,在精神上也要独立支撑。在物质上依赖他人就无法自由呼吸,在精神上依赖他人就无法随心所欲。

  • 进了好大学也好,进了好公司也好,如果有活到老学到老的想法,那就有无限的可能性。失去好奇心的那一瞬间,人就死了。读书,不是为了考试,而是为了成为出色的大人。

  • 我常常想,人类得到切割时间的能力,确实堪称是最伟大的发明之一。因为只有这样,大家才不会混混噩噩一顿水地过下去。人,有了停顿的概念,才会有反省的机会。

  • 所有的改变都是一种深思熟虑过后的奇迹, 每瞬间奇迹都在发生。

  • 雨天听雨,调动五感,全身投入,感受那一瞬间。雪天赏雪,夏天感受暑热,冬天体悟刺骨的寒冷。日日是好日,原来是这个意思。

  • 受挫的时候,想到等待着自己的人,和信任自己的人,就绝不能迷失自己。我要一点一点重新来过,慢一些也没关系。我要重新开始。

  • 今天在松松博客的博文发表成功了 :mrgreen:  博文地址

C#常用功能代码块(1)

博客 James 1个月前 (10-29) 28次浏览 已收录 0个评论 扫描二维码
文章目录[隐藏]

字符串处理

1.字符串截取

//字符串截取
//从此实例检索子字符串。 子字符串从指定的字符位置开始且具有指定的长度。
string.Substring(int index, int length);
//从此实例检索子字符串。 子字符串在指定的字符位置开始并一直到该字符串的末尾。
string.Substring(int index);

 

2. 字符串分割

//字符串分割
//separator-char类型的数组分隔符,例:new char[]{‘,’, ‘|’}
string.Split(char[] separator);
// separator-string类型的分割符
string.Split(string separator);
//分割字符串并移除空的元素
string.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);

string[] strArray = 微信被监控人.Split(',');
foreach(string str in strArray){
    微信被监控人List.Add(str);
}
string[] strArr = 多个物流详情.Split(new[] {"发货方式"},StringSplitOptions.None);

3. 字符串提取

System.Text.RegularExpressions
//提取2个子字符串之间的内容
string a = "Document No. 4504038683nDate 29.07.2021nSupplier K701694nBearbeiter/in M. PlückebaumnPlease note on all documents!";
string startstr="Document No.";
string endstr="nDate";
Regex rg = new Regex("(?<=("   startstr   "))[.\s\S]*?(?=("   endstr   "))", RegexOptions.Multiline | RegexOptions.Singleline);
Console.WriteLine(rg.Match(a).Value);

//提取所有数字
string 订单数量 = System.Text.RegularExpressions.Regex.Replace(数量, @"[^0-9] ", "");
//带有小数点数字提取
string str = "提取123.11abc提取"; //我们抓取当前字符当中的123.11
str=Regex.Replace(str, @"[^d.d]", "");
// 如果是数字,则转换为decimal类型
if (Regex.IsMatch(str, @"^[ -]?d*[.]?d*$"))
{
    decimal result = decimal.Parse(str);
    Console.WriteLine("使用正则表达式提取数字");
    Console.WriteLine(result);
}

//提取日期
var time = "";
string fileName = "行业大盘走势_童鞋_整体_20200701-20200731";
string pattern = @"_(?<time>20d{6})";
var regResult = Regex.Match(fileName, pattern);
if (regResult.Success)
{
    time = regResult.Groups["time"].ToString();
}
var uploadDate = DateTime.ParseExact(time, "yyyyMMdd", System.Globalization.CultureInfo.CurrentCulture);
Console.WriteLine(uploadDate);
</time>

4. 查找字符串

//查找字符串
Indexof(Char C):  找到第一个字符c的index,如果没找到返回-1
Indexof(string str):  找到str的index,如果没找到返回-1
LastIndexof(string str):  返回当前字符或字符串的最后一个匹配项位置

5. 日期格式化

//格式化日期为“年年年年-月月-日日”:
DateTime.Now.ToString(“yyyy-MM-dd”);
//格式化日期为“年年年年-月月-日日 时时:分分:秒秒”:
DateTime.Now.ToString(“yyyy-MM-dd HH:mm:ss”);
//当前日期加上n天,n为负数则为减去n天:
DateTime.Now.AddDays(n);
//获取日期部分:
DateTime.Now.Year//获取当前年份
DateTime.Now.Month//获取当前月份
DateTime.Now.Day//获取当前月份第几天
//获取时间部分:
DateTime.Now.Hour//获取当前时间小时部分
DateTime.Now.Minute//获取当前时间分钟部分
//2个日期之差
DateTime dt1 = Convert.ToDateTime(最后动户日期);
DateTime dt2 = Convert.ToDateTime(currentdate);                
TimeSpan ts = dt2- dt1;
int days = ts.Days;
//字符串转日期,然后转格式
var dt_dtime = DateTime.Parse(身份证到期);
身份证到期 = dt_dtime.ToString("yyyy-MM-dd");

//判断日期是否大于某个
System.DateTime.Now.ToString("HH:mm:ss").CompareTo("18:00:00") > 0

Datatable操作

1. 基础定义

//创建一个空表
DataTable  dt = new DataTable();
//创建带列名和类型名的列
dt.Columns.Add("姓名",System.Type.GetType("System.String"));
dt.Columns.Add("性别",System.Type.GetType("System.String"));
dt.Columns["product"].SetOrdinal(5);
//通过行框架创建并赋值
dt.Rows.Add("张三","男");//Add里面参数的数据顺序要和DataTable中的列的顺序对应
//通过复制dt2表的某一行来创建
dt.Rows.Add(dt2.Rows[i].ItemArray);
//对表已有行进行赋值
dt.Rows[0][1] = "张三"; //通过索引赋值
dt.Rows[0]["性别"] = DateTime.Now;//通过名称赋值

2. 筛选行

//选择column1列值为空的行的集合
DataRow[] drs = dt.Select("column1 is null");
//选择column0列值为"李四"的行的集合
DataRow[] drs = dt.Select("column0 = '李四'");
//筛选column0列值中有"张"的行的集合(模糊查询)
DataRow[] drs = dt.Select("column0 like '张%'");//如果的多条件筛选,可以加 and 或 or
//筛选column0列值中有"张"的行的集合并按column1降序排序
DataRow[] drs = dt.Select("column0 like '张%'", "column1 DESC");
//column为index的
DataRow[] drs = dt.Select("`1`is null");

3. 删除行

//使用DataTable.Rows.Remove(DataRow)方法
dt.Rows.Remove(dt.Rows[0]);
//使用DataTable.Rows.RemoveAt(index)方法
dt.Rows.RemoveAt(0);
//使用DataRow.Delete()方法
dt.Row[0].Delete();
dt.AcceptChanges();
//-----区别和注意点-----
//Remove()和RemoveAt()方法是直接删除
//Delete()方法只是将该行标记为deleted,但是还存在,还可DataTable.RejectChanges()回滚,使该行取消删除。
//用Rows.Count来获取行数时,还是删除之前的行数,需要使用DataTable.AcceptChanges()方法来提交修改。
//如果要删除DataTable中的多行,应该采用倒序循环DataTable.Rows,而且不能用foreach进行循环删除,因为正序删除时索引会发生变化,程式发生异常,很难预料后果。
for (int i = dt.Rows.Count - 1; i >= 0; i--)
{
  dt.Rows.RemoveAt(i);
}
如果不用倒序:
for(int i = 0 ; i < 职工报税基表dt.Rows.Count ; i  ){
    if(string.IsNullOrEmpty(Convert.ToString(职工报税基表dt.Rows[i][0])) || Convert.ToString(职工报税基表dt.Rows[i][0]) == "" || Convert.ToString(职工报税基表dt.Rows[i][0]) == null ){
      职工报税基表dt.Rows.RemoveAt(i);
        i=i-1;
        }
} 

4. 复制表

//复制表,同时复制了表结构和表中的数据
DataTable dtNew = new DataTable();
dtNew = dt.Copy();

//复制表
DataTable dtNew = dt.Copy();  //复制dt表数据结构
dtNew.Clear()  //清空数据
for (int i = 0; i < dt.Rows.Count; i  )
{
    if (条件语句)
    {
         dtNew.Rows.Add(dt.Rows[i].ItemArray);  //添加数据行
    }
}
//克隆表,只是复制了表结构,不包括数据
DataTable dtNew = new DataTable();
dtNew = dt.Clone();
//如果只需要某个表中的某一行
DataTable dtNew = new DataTable();
dtNew = dt.Copy();
dtNew.Rows.Clear();//清空表数据
dtNew.ImportRow(dt.Rows[0]);//这是加入的是第一行

//distinct
DataView dataView = 支付宝表dt2.DefaultView; 
DataTable 支付宝表dt2Distinct = dataView.ToTable(true,"商户订单号RPA");

5. 基础操作

//判断DataTable是否为空:
DataTable != null && DataTable.Rows.Count > 0
//获取DataTable的行:
DataTable.Rows
//获取DataTable第i行第j列:
Object obj=DataTable.Rows[i][j];
//获取DataTable行数:
Int count = DataTable.Rows.Count;
//DataTable添加行:
DataRow dr = DataTable.NewRow();
dr[0]=object value;
dr[1]= object value;
dr[2]= object value;
…
dr[n]= object value;
DataTable.Rows.Add(dr);
alldt.Rows.Add(new String[]{客户姓名, 客户号, 国籍或地区});
//获取DataTable列数:
Int count = DataTable.Columns.Count;
//获取第n列的列名:
string name = DataTable.Columns[n].ColumnName;
//DataTable排序:
//column为排序的列名,ASC为升序,也可设置为DESC降序
Table.DefaultView.Sort = “column ASC”;
//排序后的table赋值给原table
Table = Table.DefualtView.ToTable();

6. DataTable获取差集,场景:不断抓取数据,只获取增量部分

C#常用功能代码块(1)

//获取蓝色部分,反之获取红色部分
IEnumerable rows = dt1.AsEnumerable().Except(dt2.AsEnumerable(), DataRowComparer.Default);
DataTable table_diff = rows.CopyToDataTable();

7. 去掉前后空格

foreach(DataRow row in dt.Rows){
    foreach(DataColumn col in dt.Columns){
        row[col] = row[col].ToString().Trim();
    }    
}

老余博客, 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:C#常用功能代码块(1)
喜欢 (5)
[老余博客]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址