C# 每两位插入一个空格
string txt = "12345678" ;
string result = Regex .Replace(txt, @"(\d{2}(?!$))", "$1 " );
每N位插入一个就把2改成N
上面只分操作全是数字的,如果是适应所有的,可以把\d
换成.
号
string txt = "ABCD1E2F4G" ;
string result = Regex .Replace(txt, @"(.{2}(?!$))", "$1 " );
C# 每两位插入一个空格
string txt = "12345678" ;
string result = Regex .Replace(txt, @"(\d{2}(?!$))", "$1 " );
每N位插入一个就把2改成N
上面只分操作全是数字的,如果是适应所有的,可以把\d
换成.
号
string txt = "ABCD1E2F4G" ;
string result = Regex .Replace(txt, @"(.{2}(?!$))", "$1 " );
ado.net 连接mysql的类:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MySql.Data;
using MySql.Data.MySqlClient;
namespace VideoSpider
{
public class DBConn
{
#if DEBUG
private static string _connectionString = @"server=61.164.149.180;User ID=sql_zuqiu;Password=FULFQcvuFsqnbQSL;database=zuqiu_bak;";
#else
private static string _connectionString = @"server=localhost;User=11xs;Password=HPU3aMJVzECQfVXR;database=11xs";
#endif
public static MySqlConnection OpenConnection( string connstr = "" )
{
if (connstr != "" )
{
_connectionString = connstr;
}
var conn = new MySqlConnection(_connectionString);
conn.Open();
return conn;
}
}
}
C#非独占加载图片
Image _Image = Image .FromStream(new MemoryStream(System.IO.File .ReadAllBytes(Application.StartupPath + "\\v.jpg")));
pictureBox1.Image = _Image;
C#在线程中使用Invoke来调用UI线程里的控件
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using System.Windows.Forms;
namespace TextTool
{
public partial class Form1 : Form
{
private Thread workThread = null; //工作线程
private List <string> fileList = new List <string>();
public Form1()
{
InitializeComponent();
}
// 导入 可多选
private void button1_Click(object sender, EventArgs e)
{
Stream mystream;
OpenFileDialog openfiledialog1 = new OpenFileDialog();
openfiledialog1.Multiselect = true;//允许同时选择多个文件
openfiledialog1.Filter = "txt files(*.txt)|*.txt|All files(*.*)|*.*" ;
openfiledialog1.FilterIndex = 1;
openfiledialog1.RestoreDirectory = true;
if (openfiledialog1.ShowDialog() == DialogResult.OK)
{
if ((mystream = openfiledialog1.OpenFile()) != null)
{
fileList.Clear();
for (int fi = 0; fi < openfiledialog1.FileNames.Length; fi++)
{
fileList.Add(openfiledialog1.FileNames[fi]);
}
mystream.Close();
}
listView1.Items.Clear();
foreach (var filePath in fileList)
{
ListViewItem lvi = new ListViewItem(filePath);
listView1.Items.Add(lvi);
}
}
}
// 合并处理并输出
private void button2_Click(object sender, EventArgs e)
{
if (fileList.Count == 0)
{
MessageBox.Show("请先添加要处理的文件" );
return;
}
SaveFileDialog savefiledialog1 = new SaveFileDialog();
savefiledialog1.Filter = "txt files(*.txt)|*.txt" ;
if (savefiledialog1.ShowDialog() == DialogResult.OK)
{
button2.Text = "处理中..." ;
button2.Enabled = false;
workThread = new Thread (WorkThread);
workThread.Start(savefiledialog1.FileName);
}
}
private int MyCompareString(string x, string y)
{
int pos1 = x.IndexOf("(" );
int pos2 = x.IndexOf(")" );
int cnt1 = Convert .ToInt32(x.Substring(pos1 + 1, pos2-pos1 -1));
pos1 = y.IndexOf( "(");
pos2 = y.IndexOf( ")");
int cnt2 = Convert .ToInt32(y.Substring(pos1 + 1, pos2 - pos1 - 1));
if (cnt1 > cnt2)
{
return -1;
}
else if (cnt1< cnt2)
{
return 1;
}
else
{
return 0;
}
}
public void WorkThread(object savePath)
{
List<string > allLines = new List< string>();
foreach (var filePath in fileList)
{
allLines.AddRange( File.ReadAllLines(filePath));
}
int totalCount = 0;
List<string > outputList = new List< string>();
foreach (var line in (from t in allLines where t.Trim() != "" select t).Distinct())
{
int count = (from c in allLines where c == line select c).Count();
totalCount += count;
outputList.Add( $"{line} ( {count})");
}
outputList.Sort(MyCompareString);
outputList.Add( $"总数:{totalCount}" );
File.WriteAllLines(savePath.ToString(), outputList);
Invoke( new MethodInvoker (delegate ()
{
button2.Text = "合并处理输出" ;
button2.Enabled = true;
MessageBox.Show("处理完成!" );
}));
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if (workThread != null && workThread.IsAlive)
{
workThread.Abort();
}
}
}
}
如果是WPF程序,则在线程中像下面这样操作控件
this.Dispatcher.Invoke(new Action( delegate
{
lblState.Content = "正在检测域名" + fullUrl;
}));
C#使用OleDB连接Access数据库的代码:
public class DbHelper
{
static DbHelper()
{
connectionString = GetConnectionString();
}
private static string connectionString;
private static string GetConnectionString()
{
return string.Format( "File Name={0}\\link.udl", Application .StartupPath);
}
public static DataTable ExecuteDataTable( string sql)
{
try
{
using ( OleDbDataAdapter da = new OleDbDataAdapter (sql, connectionString))
{
DataSet ds = new DataSet();
da.Fill(ds);
return ds.Tables[0];
}
}
catch( Exception e)
{
MessageBox.Show(e.Message);
return null;
}
}
public static void ExecuteNonQuery( string sql)
{
using ( OleDbConnection conn = new OleDbConnection (connectionString))
{
try
{
conn.Open();
OleDbCommand cmd = conn.CreateCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = sql;
cmd.ExecuteNonQuery();
cmd.Dispose();
}
finally
{
if (conn.State == ConnectionState.Open) conn.Close();
}
}
}
}
C#判断一个类型是否是集合类型:
typeof(T).GetTypeInfo().ImplementedInterfaces.Contains(typeof(IEnumerable))
C# 遍历文件下所有文件
string[] files = Directory .GetFiles(Application.StartupPath, "*.mdb", SearchOption .AllDirectories);
如果要遍历所有的,把 *.mdb
改成*
即可。
C#二维数组的定义
string[,] items = new string[_totalCount, 32];
和string[][] = new string[32][];
是有区别的。
C#读取十六进制文件
BinaryReader br = new BinaryReader( File.OpenRead(_fileName));
br.BaseStream.Position = 0xF;
string first_player = br.ReadByte().ToString("X2"); //ToString("X2") 为C#中的字符串格式控制符。X表示十六进制,2为每次都是两位数
br.Close();
MessageBox.Show(first_player);
System.Web.HttpUtility.UrlEncode
都是对参数进行编码,要像下面这样写:
string data = string.Format(@"{{""ptwebqq"":""{0}"",""clientid"":{1},""psessionid"":""{2}"",""status"":""online""}}", _PTWebQQ, ClientID, PSessionID);
data = "r=" + Uri.EscapeDataString(data);
而不要把r=也编码进去!!!
血的教训,一晚上加一上午都浪费在这上面了!!!!
而python的urllib.parse.urlencode
传入的是字典,所以避免了这个坑。