FuncStr.cs 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Linq.Expressions;
  6. namespace WMS.Util
  7. {
  8. /// <summary>
  9. /// 常用字符串处理
  10. /// </summary>
  11. public class FuncStr
  12. {
  13. /// <summary>
  14. /// 转换为字符串,空对象转换为空字符串
  15. /// </summary>
  16. /// <param name="obj"></param>
  17. /// <returns></returns>
  18. public static string NullToStr(object obj)
  19. {
  20. if (obj == null || obj == System.DBNull.Value) //数据库空可以不判断,系统会自动转换为null
  21. return "";
  22. else
  23. return obj.ToString().Trim();
  24. }
  25. /// <summary>
  26. /// 为空返回字符串"null",否则返回其实际值
  27. /// </summary>
  28. /// <param name="obj"></param>
  29. /// <returns></returns>
  30. public static string IntToStr(int? obj)
  31. {
  32. if (obj.HasValue)
  33. return obj.Value.ToString();
  34. else
  35. return "null";
  36. }
  37. /// <summary>
  38. /// 为空返回字符串"null",否则返回其实际值
  39. /// </summary>
  40. /// <param name="obj"></param>
  41. /// <returns></returns>
  42. public static string DecimalToStr(decimal? obj)
  43. {
  44. if (obj.HasValue)
  45. return obj.Value.ToString();
  46. else
  47. return "null";
  48. }
  49. /// <summary>
  50. /// 转换为字符串,空对象转换为空字符串,并带单引号
  51. /// </summary>
  52. /// <param name="obj"></param>
  53. /// <returns></returns>
  54. public static string NullToStrWithExpr(object obj)
  55. {
  56. string sResult = "";
  57. if (obj == null || obj == System.DBNull.Value) //数据库空可以不判断,系统会自动转换为null
  58. return "null";
  59. else
  60. sResult = obj.ToString().Trim();
  61. return Expr(sResult);
  62. }
  63. /// <summary>
  64. /// 为字符串加单引号
  65. /// </summary>
  66. /// <param name="Str">要处理的字符串</param>
  67. /// <returns></returns>
  68. public static string Expr(string Str)
  69. {
  70. return "'" + Str.Replace("'", "''") + "'";
  71. }
  72. /// <summary>
  73. /// 转换为int,空对象转换为0
  74. /// </summary>
  75. /// <param name="obj"></param>
  76. /// <returns></returns>
  77. public static int NullToInt(object obj)
  78. {
  79. if (obj == null || obj == System.DBNull.Value) //数据库空可以不判断,系统会自动转换为null
  80. return 0;
  81. else
  82. return ToInt32(obj.ToString());
  83. }
  84. /// <summary>
  85. /// 转换为Int64(long),空对象转换为0
  86. /// </summary>
  87. /// <param name="obj"></param>
  88. /// <returns></returns>
  89. public static long NullToLong(object obj)
  90. {
  91. if (obj == null || obj == System.DBNull.Value) //数据库空可以不判断,系统会自动转换为null
  92. return 0;
  93. else try
  94. {
  95. return long.Parse(obj.ToString());
  96. }
  97. catch { return 0; }
  98. }
  99. /// <summary>
  100. /// 转换为Int16(short),空对象转换为0
  101. /// </summary>
  102. /// <param name="obj"></param>
  103. /// <returns></returns>
  104. public static short NullToShort(object obj)
  105. {
  106. if (obj == null || obj == System.DBNull.Value) //数据库空可以不判断,系统会自动转换为null
  107. return 0;
  108. else try
  109. {
  110. return short.Parse(obj.ToString());
  111. }
  112. catch { return 0; }
  113. }
  114. /// <summary>
  115. /// 转换为Int16(short),空对象转换为0
  116. /// </summary>
  117. /// <param name="obj"></param>
  118. /// <returns></returns>
  119. public static float NullToFloat(object obj)
  120. {
  121. if (obj == null || obj == System.DBNull.Value) //数据库空可以不判断,系统会自动转换为null
  122. return 0;
  123. else try
  124. {
  125. return float.Parse(obj.ToString());
  126. }
  127. catch { return 0; }
  128. }
  129. /// <summary>
  130. /// 把一个字符串类型转化为可能的整型
  131. /// </summary>
  132. /// <param name="S"></param>
  133. /// <returns></returns>
  134. public static int ToInt32(string S)
  135. {
  136. S = S.Trim();
  137. if (S.Trim() == "") return (0);
  138. if (S.IndexOf("-") >= 0)
  139. { //有负号,但不是开头,则转换为0
  140. if (S.StartsWith("-") == false) return (0);
  141. if (S.StartsWith("--")) return (0);
  142. }
  143. for (int i = 0; i < S.Length; i++)
  144. {
  145. switch (S.Substring(i, 1))
  146. {
  147. case "0":
  148. case "1":
  149. case "2":
  150. case "3":
  151. case "4":
  152. case "5":
  153. case "6":
  154. case "7":
  155. case "8":
  156. case "9":
  157. break;
  158. case "-":
  159. if (S.Length == 1) return (0);
  160. break;
  161. default:
  162. if (i == 0)
  163. return (0);
  164. else
  165. try { return (Convert.ToInt32(S.Substring(0, i))); }
  166. catch { return 0; }
  167. }
  168. }
  169. try { return (Convert.ToInt32(S)); }
  170. catch { return 0; }
  171. }
  172. /// <summary>
  173. /// 判断字符串是否包含非数字字符
  174. /// </summary>
  175. /// <returns>返回是否</returns>
  176. public static bool IsNumber(string str)
  177. {
  178. foreach (char _chr in str)
  179. if (!Char.IsNumber(_chr))
  180. return false;
  181. return true;
  182. }
  183. /// <summary>
  184. /// 判断字符串是否数字
  185. /// </summary>
  186. /// <returns>返回是否</returns>
  187. public static bool IsNumeric(object str)
  188. {
  189. try
  190. {
  191. decimal _d = Convert.ToDecimal(str);
  192. }
  193. catch
  194. {
  195. return false;
  196. }
  197. return true;
  198. }
  199. /// <summary>
  200. /// 转换为Decimal,空对象转换为0.0
  201. /// </summary>
  202. /// <param name="obj"></param>
  203. /// <returns></returns>
  204. public static Decimal NullToDecimal(object obj)
  205. {
  206. if (obj == null || obj == System.DBNull.Value) //数据库空可以不判断,系统会自动转换为null
  207. return 0.0M;
  208. else
  209. return FuncStr.ToDecimal(obj.ToString());
  210. }
  211. /// <summary>
  212. /// 转换为DateTime,空对象转换为DateTime.MinDate
  213. /// </summary>
  214. /// <param name="obj"></param>
  215. /// <returns></returns>
  216. public static DateTime NullToDateTimeDefault(object _Obj)
  217. {
  218. if (_Obj == null || _Obj is DBNull) { return DateTime.MinValue; }
  219. if (_Obj is DateTime) { return (DateTime)_Obj; }
  220. var _Val = _Obj.ToString();
  221. var _Formats = new string[]
  222. {
  223. "yyyyMMdd",
  224. "yyyy/MM/dd",
  225. "yyyy/M/dd",
  226. "yyyy-MM-dd",
  227. "yyyy.MM.dd",
  228. "yyyy MM dd",
  229. "yyyy年MM月dd日",
  230. "MM/dd/yyyy",
  231. "MM-dd-yyyy",
  232. "MM.dd.yyyy",
  233. "MM dd yyyy",
  234. "MM月dd日",
  235. "yyyy年MM月",
  236. "yyyyMMddHHmm",
  237. "yyyyMMddHHmmss",
  238. "yyyyMMdd HHmmss",
  239. "yyyy/MM/dd HH:mm:ss",
  240. "yyyy.MM.dd HH:mm:ss",
  241. "yyyy-MM-dd HH:mm:ss",
  242. "yyyy-MM-dd H:mm:ss",
  243. "yyyy-MM-dd HH:mm:ss.fff",
  244. "yyyy-MM-dd HH:mm:ss fff",
  245. "yyyy-M-d HH:mm:ss",
  246. "yyyy-M-d H:mm:ss",
  247. "yyyy-M-d H:mm:ss.fff",
  248. "HHmmss",
  249. "HH:mm:ss",
  250. };
  251. try
  252. {
  253. return DateTime.ParseExact(_Val, _Formats, null, System.Globalization.DateTimeStyles.None);
  254. }
  255. catch { return DateTime.MinValue; }
  256. }
  257. /// <summary>
  258. /// 转换为DateTime,空对象转换为DateTime.MinDate
  259. /// </summary>
  260. /// <param name="obj"></param>
  261. /// <returns></returns>
  262. public static DateTime? NullToDateTime(object obj)
  263. {
  264. try
  265. {
  266. return Convert.ToDateTime(obj.ToString());
  267. }
  268. catch
  269. {
  270. return null;
  271. }
  272. }
  273. /// <summary>
  274. /// 转换为double,空对象转换为0.0
  275. /// </summary>
  276. /// <param name="obj"></param>
  277. /// <returns></returns>
  278. public static double NullToDouble(object obj)
  279. {
  280. if (obj == null || obj == System.DBNull.Value) //数据库空可以不判断,系统会自动转换为null
  281. return 0.0;
  282. else
  283. return FuncStr.ToDouble(obj.ToString());
  284. }
  285. /// <summary>
  286. /// 把一个字符串类型转化为可能的俘点型
  287. /// </summary>
  288. /// <param name="S"></param>
  289. /// <returns></returns>
  290. public static double ToDouble(string S)
  291. {
  292. bool Flag = false;
  293. S = S.Trim();
  294. if (S.Trim() == "") return (0);
  295. if (S.IndexOf("-") >= 0)
  296. { //有负号,但不是开头,则转换为0
  297. if (S.StartsWith("-") == false) return (0);
  298. if (S.StartsWith("--")) return (0);
  299. }
  300. for (int i = 0; i < S.Length; i++)
  301. {
  302. switch (S.Substring(i, 1))
  303. {
  304. case "0":
  305. case "1":
  306. case "2":
  307. case "3":
  308. case "4":
  309. case "5":
  310. case "6":
  311. case "7":
  312. case "8":
  313. case "9":
  314. break;
  315. case "-":
  316. if (S.Length == 1) return (0); //只有一个点的情况
  317. break;
  318. case ".":
  319. if (S.Length == 1) return (0); //只有一个点的情况
  320. if (Flag == false)
  321. {
  322. Flag = true;
  323. }
  324. else
  325. { //如果出现2个点
  326. if (i == 0) //实际不可能 I=0
  327. return (0);
  328. else //取这个点之前的内容来进行计算
  329. try { return (Convert.ToDouble(S.Substring(0, i))); }
  330. catch { return (0); }
  331. }
  332. break;
  333. default: //出现非法数字
  334. if (i == 0)
  335. return (0);
  336. else
  337. try { return (Convert.ToDouble(S.Substring(0, i))); }
  338. catch { return (0); }
  339. }
  340. }
  341. try { return (Convert.ToDouble(S)); }
  342. catch { return 0; }
  343. }
  344. /// <summary>
  345. /// 把一个字符串类型转化为可能的俘点型
  346. /// </summary>
  347. /// <param name="S"></param>
  348. /// <returns></returns>
  349. public static decimal ToDecimal(string S)
  350. {
  351. bool Flag = false;
  352. S = S.Trim();
  353. if (S.Trim() == "") return (0);
  354. if (S.IndexOf("-") >= 0)
  355. { //有负号,但不是开头,则转换为0
  356. if (S.StartsWith("-") == false) return (0);
  357. if (S.StartsWith("--")) return (0);
  358. }
  359. for (int i = 0; i < S.Length; i++)
  360. {
  361. switch (S.Substring(i, 1))
  362. {
  363. case "0":
  364. case "1":
  365. case "2":
  366. case "3":
  367. case "4":
  368. case "5":
  369. case "6":
  370. case "7":
  371. case "8":
  372. case "9":
  373. break;
  374. case "-":
  375. if (S.Length == 1) return (0M);
  376. break;
  377. case ".":
  378. if (S.Length == 1) return (0M); //只有一个点的情况
  379. if (Flag == false)
  380. {
  381. Flag = true;
  382. }
  383. else
  384. { //如果出现2个点
  385. if (i == 0) //实际不可能 I=0
  386. return (0M);
  387. else //取这个点之前的内容来进行计算
  388. try { return (Convert.ToDecimal(S.Substring(0, i))); }
  389. catch { return 0m; }
  390. }
  391. break;
  392. default: //出现非法数字
  393. if (i == 0)
  394. return (0M);
  395. else
  396. try { return (Convert.ToDecimal(S.Substring(0, i))); }
  397. catch { return 0m; }
  398. }
  399. }
  400. try { return (Convert.ToDecimal(S)); }
  401. catch { return 0m; }
  402. }
  403. /// <summary>
  404. /// 取字符串srcs左边lenn个字符组成的串
  405. /// </summary>
  406. /// <param name="srcs"></param>
  407. /// <param name="lenn"></param>
  408. /// <returns></returns>
  409. public static String LeftStr(String srcs, int lenn)
  410. {
  411. return MidStr(srcs, 0, lenn);
  412. }
  413. /// <summary>
  414. /// 取字符串srcs右边lenn个字符组成的串
  415. /// </summary>
  416. /// <param name="srcs"></param>
  417. /// <param name="lenn"></param>
  418. /// <returns></returns>
  419. public static String RightStr(String srcs, int lenn)
  420. {
  421. if (srcs.Length >= lenn)
  422. return MidStr(srcs, srcs.Length - lenn);
  423. else
  424. return srcs;
  425. }
  426. /// <summary>
  427. /// 取字符串srcs从startp开始到结尾的字符组成的字符串
  428. /// </summary>
  429. /// <param name="srcs"></param>
  430. /// <param name="startp"></param>
  431. /// <returns></returns>
  432. public static String MidStr(String srcs, int startp)
  433. {
  434. if ((startp >= 0) && (srcs.Length >= startp))
  435. return srcs.Substring(startp);
  436. else
  437. return "";
  438. }
  439. /// <summary>
  440. /// 取字符串srcs从startp开始的lenn个长度字符组成的字符串
  441. /// </summary>
  442. /// <param name="srcs"></param>
  443. /// <param name="startp"></param>
  444. /// <param name="lenn"></param>
  445. /// <returns></returns>
  446. public static String MidStr(String srcs, int startp, int lenn)
  447. {
  448. if ((startp >= 0) && (lenn > 0) && (srcs.Length >= startp))
  449. {
  450. if (lenn > srcs.Length) lenn = srcs.Length;
  451. return srcs.Substring(startp, lenn);
  452. }
  453. else
  454. return "";
  455. }
  456. /// <summary>
  457. /// 从字符串strs中取从startp位置开始遇到的第一个subs所在的位置
  458. /// </summary>
  459. /// <param name="strs"></param>
  460. /// <param name="subs"></param>
  461. /// <param name="startp"></param>
  462. /// <returns></returns>
  463. public static int PosStr(String strs, String subs, int startp)
  464. {
  465. if (startp >= strs.Length)
  466. return -1;
  467. else
  468. return strs.IndexOf(subs, startp);
  469. }
  470. /// <summary>
  471. /// 从字符串strs中取遇到的第一个subs所在的位置
  472. /// </summary>
  473. /// <param name="strs"></param>
  474. /// <param name="subs"></param>
  475. /// <returns></returns>
  476. public static int PosStr(String strs, String subs)
  477. {
  478. return PosStr(strs, subs, 0);
  479. }
  480. /// <summary>
  481. /// 将字符串srs中标识为ids的值删除,其中dpts为分隔符,equs为等值符
  482. /// 字符串strs的格式为:&lt;name&gt;&lt;equs&gt;&lt;value&gt;[&lt;dpts&gt;&lt;name&gt;&lt;equs&gt;&lt;value&gt;]
  483. /// </summary>
  484. /// <param name="strs"></param>
  485. /// <param name="dpts"></param>
  486. /// <param name="equs"></param>
  487. /// <param name="ids"></param>
  488. /// <returns></returns>
  489. public static String DelParmStr(String strs, String dpts, String equs, String ids)
  490. {
  491. int pos0, pos1, pos2;
  492. strs = dpts + strs;
  493. pos0 = PosStr(strs.ToUpper(), (dpts + ids + equs).ToUpper());
  494. if (pos0 >= 0)
  495. {
  496. pos1 = pos0 + ((string)(dpts + ids + equs)).Length;
  497. pos2 = PosStr(strs, dpts, pos1);
  498. if (pos2 >= 0)
  499. {
  500. if (pos0 >= 1)
  501. strs = LeftStr(strs, pos0) + MidStr(strs, pos2);
  502. else
  503. strs = MidStr(strs, pos2);
  504. }
  505. else
  506. {
  507. if (pos0 >= 1)
  508. strs = LeftStr(strs, pos0);
  509. else
  510. strs = dpts;
  511. }
  512. }
  513. strs = MidStr(strs, dpts.Length);
  514. return strs;
  515. }
  516. /// <summary>
  517. /// 将字符串srs中标识为ids的值删除,其中dpts为分隔符,等值符为"="
  518. /// 字符串strs的格式为:&lt;name&gt;=&lt;value&gt;[&lt;dpts&gt;&lt;name&gt;=&lt;value&gt;]
  519. /// </summary>
  520. /// <param name="strs"></param>
  521. /// <param name="dpts"></param>
  522. /// <param name="ids"></param>
  523. /// <returns></returns>
  524. public static String DelParmStr(String strs, String dpts, String ids)
  525. {
  526. return DelParmStr(strs, dpts, "=", ids);
  527. }
  528. /// <summary>
  529. /// 将字符串srs中标识为ids的值删除,其中分隔符为";",等值符为"="
  530. /// 字符串strs的格式为:&lt;name&gt;=&lt;value&gt;[;&lt;name&gt;=&lt;value&gt;]
  531. /// </summary>
  532. /// <param name="strs"></param>
  533. /// <param name="ids"></param>
  534. /// <returns></returns>
  535. public static String DelParmStr(String strs, String ids)
  536. {
  537. return DelParmStr(strs, ";", ids);
  538. }
  539. /// <summary>
  540. /// 将一个整数Ascii码转化为一个字符
  541. /// </summary>
  542. /// <param name="ascode"></param>
  543. /// <returns></returns>
  544. public static char Chr(int ascode)
  545. {
  546. return (char)ascode;
  547. }
  548. /// <summary>
  549. /// 从字符串str中取出第一个字符
  550. /// </summary>
  551. /// <param name="str"></param>
  552. /// <returns></returns>
  553. public static char Chr(string str)
  554. {
  555. return Chr(str, 0);
  556. }
  557. /// <summary>
  558. /// 从字符串str中取出第chrpos个字符
  559. /// </summary>
  560. /// <param name="str"></param>
  561. /// <param name="chrpos"></param>
  562. /// <returns></returns>
  563. public static char Chr(string str, int chrpos)
  564. {
  565. return str.ToCharArray(chrpos, 1)[0];
  566. }
  567. /// <summary>
  568. /// 获取字符chr的Ascii码
  569. /// </summary>
  570. /// <param name="chr"></param>
  571. /// <returns></returns>
  572. public static int Asc(char chr)
  573. {
  574. return Convert.ToInt32(chr);
  575. }
  576. /// <summary>
  577. /// 获取字符串str中第一个字符的Ascii码
  578. /// </summary>
  579. /// <param name="str"></param>
  580. /// <returns></returns>
  581. public static int Asc(string str)
  582. {
  583. return Asc(str, 0);
  584. }
  585. /// <summary>
  586. /// 获取字符串str中第chrpos个字符的Ascii码
  587. /// </summary>
  588. /// <param name="str"></param>
  589. /// <param name="chrpos"></param>
  590. /// <returns></returns>
  591. public static int Asc(string str, int chrpos)
  592. {
  593. return Asc(str.ToCharArray(chrpos, 1)[0]);
  594. }
  595. /// <summary>
  596. /// 转换实体内DateTime?类型到字符串
  597. /// </summary>
  598. /// <param name="_Date">DateTime? 类型数据</param>
  599. /// <param name="psFormatStr">样式</param>
  600. /// <returns>返回字符串</returns>
  601. public static string NullToDateTimeStr(DateTime? _Date, string psFormatStr)
  602. {
  603. string _lsRT = "";
  604. if (_Date != null)
  605. _lsRT = Convert.ToDateTime(_Date).ToString(psFormatStr);
  606. return _lsRT;
  607. }
  608. /// <summary>
  609. ///
  610. /// </summary>
  611. /// <typeparam name="T"></typeparam>
  612. /// <param name="_list"></param>
  613. /// <returns></returns>
  614. public static string GetString<T>(List<T> _list)
  615. {
  616. var _Str = string.Empty;
  617. if (_list == null) { return _Str; }
  618. _list.ForEach(p => _Str += p.ToString() + ";");
  619. return _Str;
  620. }
  621. /// <summary>
  622. /// object 转换成 DataTime
  623. /// </summary>
  624. /// <param name="_Obj"></param>
  625. /// <returns></returns>
  626. public static DateTime Obj2DateTime(object _Obj)
  627. {
  628. if (_Obj == null || _Obj is DBNull) { return DateTime.MinValue; }
  629. if (_Obj is DateTime) { return (DateTime)_Obj; }
  630. var _Val = _Obj.ToString();
  631. var _Formats = new string[]
  632. {
  633. "yyyyMMdd",
  634. "yyyy/MM/dd",
  635. "yyyy-MM-dd",
  636. "yyyy.MM.dd",
  637. "yyyy MM dd",
  638. "yyyy年MM月dd日",
  639. "MM/dd/yyyy",
  640. "MM-dd-yyyy",
  641. "MM.dd.yyyy",
  642. "MM dd yyyy",
  643. "MM月dd日",
  644. "yyyy年MM月",
  645. "yyyyMMddHHmm",
  646. "yyyyMMddHHmmss",
  647. "yyyyMMdd HHmmss",
  648. "yyyy/MM/dd HH:mm:ss",
  649. "yyyy.MM.dd HH:mm:ss",
  650. "yyyy-MM-dd HH:mm:ss",
  651. "yyyy-MM-dd H:mm:ss",
  652. "yyyy-M-d HH:mm:ss",
  653. "yyyy-M-d H:mm:ss",
  654. "HHmmss",
  655. "HH:mm:ss",
  656. };
  657. try
  658. {
  659. return DateTime.ParseExact(_Val, _Formats, null, System.Globalization.DateTimeStyles.None);
  660. }
  661. catch { return DateTime.MinValue; }
  662. }
  663. /// <summary>
  664. /// 连续按实际长度获取字符串中的数据 从第1位开始计算start
  665. /// </summary>
  666. /// <param name="Str"></param>
  667. /// <param name="Start"></param>
  668. /// <param name="Length"></param>
  669. /// <returns></returns>
  670. public static string MidStrB(string Str, int Start, int Length)
  671. {
  672. int L = LenB(Str);
  673. if (L < Start) return "";
  674. string T = "";
  675. for (int i = 0; i < Str.Length; i++)
  676. {
  677. if (LenB(Str.Substring(0, i + 1)) >= Start)
  678. T = T + Str.Substring(i, 1);
  679. if (LenB(T) >= Length)
  680. return MyTrim(T);
  681. }
  682. return ""; //MidStrB = MyTrim(MidStrB);
  683. }
  684. /// <summary>
  685. /// 字符串长度包括汉字两位
  686. /// </summary>
  687. /// <param name="Str"></param>
  688. /// <returns></returns>
  689. public static int LenB(string Str)
  690. {
  691. return System.Text.Encoding.Default.GetByteCount(Str);
  692. }
  693. /// <summary>
  694. /// 可以将Chr(0)结束的字符串截取空格
  695. /// </summary>
  696. /// <param name="Str"></param>
  697. /// <returns></returns>
  698. public static string MyTrim(string Str)
  699. {
  700. string T = "";
  701. int i;
  702. int L = Str.Length;
  703. for (i = 0; i < L; i++)
  704. {
  705. T = Str.Substring(i, 1);
  706. if (T != " " && Convert.ToInt32(Convert.ToChar(T)) != 0)
  707. {
  708. break;
  709. }
  710. }
  711. Str = Str.Substring(i, L - i);
  712. L = Str.Length;
  713. for (i = L - 1; i >= 0; i--)
  714. {
  715. T = Str.Substring(i, 1);
  716. if (T != " " && Convert.ToInt32(Convert.ToChar(T)) != 0)
  717. {
  718. break;
  719. }
  720. }
  721. Str = Str.Substring(0, i + 1);
  722. return Str;
  723. }
  724. /// <summary>
  725. /// 字符串补空格
  726. /// </summary>
  727. /// <param name="psStr">字符串</param>
  728. /// <param name="piCount">总长度</param>
  729. /// <returns>返回传入字符串</returns>
  730. public static string SetStrNSP(string psStr, int piCount)
  731. {
  732. while (Encoding.Default.GetByteCount(psStr) <= piCount)
  733. {
  734. psStr += " ";
  735. }
  736. return psStr;
  737. }
  738. /// <summary>
  739. /// 获取类的某属性名称 (eg: string s = GetPropName&lt;T>(p => p.prop1);)
  740. /// </summary>
  741. /// <typeparam name="T">类名</typeparam>
  742. /// <param name="expr">lambda表达式</param>
  743. /// <returns>属性的名称</returns>
  744. public static string GetPropName<T>(Expression<Func<T, object>> expr)
  745. {
  746. try
  747. {
  748. switch (expr.Body.NodeType)
  749. {
  750. case ExpressionType.MemberAccess:
  751. return ((MemberExpression)expr.Body).Member.Name;
  752. case ExpressionType.Convert:
  753. return ((MemberExpression)((UnaryExpression)expr.Body).Operand).Member.Name;
  754. default:
  755. return string.Empty;
  756. }
  757. }
  758. catch (Exception)
  759. {
  760. return string.Empty;
  761. }
  762. }
  763. /// <summary>
  764. /// 获取时间类型sql字符串
  765. /// </summary>
  766. /// <param name="dt">时间</param>
  767. /// <param name="IsOracle">是否是oracle数据库</param>
  768. /// <returns></returns>
  769. public static string GetSqlTimeStr(DateTime? dt, bool IsOracle = false)
  770. {
  771. if (dt == null) return "NULL";
  772. if (IsOracle)
  773. return "TO_DATE('" + ((DateTime)dt).ToString("yyyy-MM-dd HH:mm:ss") + "','YYYY-MM-DD HH24:MI:SS')";
  774. return "'" + ((DateTime)dt).ToString("yyyy-MM-dd HH:mm:ss.fff") + "'";
  775. }
  776. /// <summary>
  777. /// 针对可null值类型做数据库insert时转换成"NULL"
  778. /// </summary>
  779. /// <param name="obj">值类型如:int? decimal? double? ...</param>
  780. /// <returns></returns>
  781. public static string NullToDBStr(object obj)
  782. {
  783. if (obj == null) { return "NULL"; }
  784. return obj.ToString();
  785. }
  786. /// <summary>
  787. /// 字符串转换成bool值
  788. /// </summary>
  789. /// <param name="_str">字符串</param>
  790. /// <param name="_bool">bool值的默认值</param>
  791. /// <returns></returns>
  792. public static bool GetBool(string _str, bool _bool)
  793. {
  794. if (!string.IsNullOrEmpty(_str))
  795. try { _bool = Convert.ToBoolean(_str); }
  796. catch { }
  797. return _bool;
  798. }
  799. /// <summary>
  800. /// 字符串转换成Int值
  801. /// </summary>
  802. /// <param name="_str">字符串</param>
  803. /// <param name="_defaut">int默认值</param>
  804. /// <param name="_max">最大值</param>
  805. /// <param name="_min">最小值</param>
  806. /// <returns></returns>
  807. public static int GetInt(string _str, int _defaut, int _max = 0, int _min = 0)
  808. {
  809. if (string.IsNullOrEmpty(_str)) return _defaut;
  810. int _temp = 0;
  811. try { _temp = FuncStr.NullToInt(_str); }
  812. catch { return _defaut; }
  813. if ((_temp >= _min && _temp <= _max) || (_max == _min && _max == 0))
  814. return _temp;
  815. return _defaut;
  816. }
  817. /// <summary>
  818. /// 字符串转换成List string
  819. /// </summary>
  820. /// <param name="_str">字符串</param>
  821. /// <param name="_chr">截取方式</param>
  822. /// <returns></returns>
  823. public static List<string> GetList(string _str, char _chr = ',')
  824. {
  825. List<string> _list = new List<string>();
  826. if (!string.IsNullOrEmpty(_str))
  827. try { _list = _str.Split(_chr).ToList(); }
  828. catch { }
  829. return _list;
  830. }
  831. /// <summary>
  832. /// 字符串转换成double
  833. /// </summary>
  834. /// <param name="_str">字符串</param>
  835. /// <param name="_double">默认值</param>
  836. /// <returns></returns>
  837. public static double GetDouble(string _str, double _double)
  838. {
  839. if (!string.IsNullOrEmpty(_str))
  840. try { _double = FuncStr.NullToDouble(_str); }
  841. catch { }
  842. return _double;
  843. }
  844. /// <summary>
  845. /// 字符串转换成decimal
  846. /// </summary>
  847. /// <param name="_str">字符串</param>
  848. /// <param name="_decimal">默认值</param>
  849. /// <returns></returns>
  850. public static decimal GetDecimal(string _str, decimal _decimal)
  851. {
  852. if (!string.IsNullOrEmpty(_str))
  853. try { _decimal = FuncStr.NullToDecimal(_str); }
  854. catch { }
  855. return _decimal;
  856. }
  857. /// <summary>
  858. /// 发票号累加
  859. /// </summary>
  860. /// <param name="_invoiceNumber">发票号</param>
  861. /// <param name="_count">发票张数</param>
  862. /// <returns></returns>
  863. public static string InvoiceNumberAdd(string _invoiceNumber, int _count)
  864. {
  865. int _index = _invoiceNumber.ToList().FindLastIndex(p => !Char.IsDigit(p));
  866. string _head = _index >= 0 ? _invoiceNumber.Substring(0, _index + 1) : string.Empty;
  867. string _number = _index >= 0 ? _invoiceNumber.Substring(_index + 1) : _invoiceNumber;
  868. long _result = 0;
  869. if (long.TryParse(_number, out _result))
  870. _result += _count;
  871. return _head + _result.ToString().PadLeft(_number.Length, '0');
  872. }
  873. }
  874. }