C# 格式化字符串的實(shí)現(xiàn)代碼
1 前言
如果你熟悉Microsoft Foundation Classes(MFC)的CString,Windows Template Library(WTL)的CString或者Standard Template Library(STL)的字符串類(lèi),那么你對(duì)String.Format方法肯定很熟悉。在C#中也經(jīng)常使用這個(gè)方法來(lái)格式化字符串,比如下面這樣:
int x = 16;
decimal y = 3.57m;
string h = String.Format( "item {0} sells at {1:C}", x, y );
Console.WriteLine(h);
在我的機(jī)器上,可以得到下面的輸出:
item 16 sells at ¥3.57
也許你的機(jī)器上的輸出和這個(gè)不太一樣。這是正常的,本文稍后就會(huì)解釋這個(gè)問(wèn)題。
在我們?nèi)粘J褂弥?,更多的是使用Console.WriteLine方法來(lái)輸出一個(gè)字符串。其實(shí)String.Format和Console.WriteLine有很多共同點(diǎn)。兩個(gè)方法都有很多重載的格式并且采用無(wú)固定參數(shù)的對(duì)象數(shù)組作為最后一個(gè)參數(shù)。下面的兩個(gè)語(yǔ)句會(huì)產(chǎn)生同樣的輸出。
Console.WriteLine( "Hello {0} {1} {2} {3} {4} {5} {6} {7} {8}", 123, 45.67, true, 'Q', 4, 5, 6, 7, '8');
string u = String.Format("Hello {0} {1} {2} {3} {4} {5} {6} {7} {8}", 123, 45.67, true, 'Q', 4, 5, 6, 7, '8');
Console.WriteLine(u);
輸出如下:
Hello 123 45.67 True Q 4 5 6 7 8
Hello 123 45.67 True Q 4 5 6 7 8
2 字符串格式
String.Format和WriteLine都遵守同樣的格式化規(guī)則。格式化的格式如下:"{ N [, M ][: formatString ]}", arg1, ... argN,在這個(gè)格式中:
1) N是從0開(kāi)始的整數(shù),表示要格式化的參數(shù)的個(gè)數(shù)
2) M是一個(gè)可選的整數(shù),表示格式化后的參數(shù)所占的寬度,如果M是負(fù)數(shù),那么格式化后的值就是左對(duì)齊的,如果M是正數(shù),那么格式化后的值是右對(duì)齊的
3) formatString是另外一個(gè)可選的參數(shù),表示格式代碼
argN表示要格式化的表達(dá)式,和N是對(duì)應(yīng)的。
如果argN是空值,那么就用一個(gè)空字符串來(lái)代替。如果沒(méi)有formatString,那么就用參數(shù)N對(duì)應(yīng)的ToString方法來(lái)格式化。下面的語(yǔ)句會(huì)產(chǎn)生同樣的輸出:
public class TestConsoleApp
{
public static void Main(string[] args)
{
Console.WriteLine(123);
Console.WriteLine("{0}", 123);
Console.WriteLine("{0:D3}", 123);
}
}
輸出是:
123
123
123
也可以通過(guò)String.Format得到同樣的輸出。
string s = string.Format("123");
string t = string.Format("{0}", 123);
string u = string.Format("{0:D3}", 123);
Console.WriteLine(s);
Console.WriteLine(t);
Console.WriteLine(u);
因此有如下結(jié)論:
(,M)決定了格式化字符串的寬度和對(duì)齊方向
(:formatString)決定了如何格式化數(shù)據(jù),比如用貨幣符號(hào),科學(xué)計(jì)數(shù)法或者16進(jìn)制。就像下面這樣:
Console.WriteLine("{0,5} {1,5}", 123, 456); // 右對(duì)齊
Console.WriteLine("{0,-5} {1,-5}", 123, 456); // 左對(duì)齊
輸出是
123 456
123 456
也可以合并這些表達(dá)式,先放一個(gè)逗號(hào),再放一個(gè)冒號(hào)。就像這樣:
Console.WriteLine("{0,-10:D6} {1,-10:D6}", 123, 456);
輸出是:
000123 000456
我們可以用這種格式化特性來(lái)對(duì)齊我們的輸出。
Console.WriteLine("\n{0,-10}{1,-3}", "Name","Salary");
Console.WriteLine("----------------");
Console.WriteLine("{0,-10}{1,6}", "Bill", 123456);
Console.WriteLine("{0,-10}{1,6}", "Polly", 7890);
輸出是:
Name Salary
----------------
Bill 123456
Polly 7890
3 格式化標(biāo)識(shí)符
標(biāo)準(zhǔn)的數(shù)學(xué)格式字符串用于返回通常使用的字符串。它們通常象X0這樣的格式。X是格式化標(biāo)識(shí)符,0是精度標(biāo)識(shí)符。格式標(biāo)識(shí)符號(hào)共有9種,它們代表了大多數(shù)常用的數(shù)字格式。就像下表所示:
| 字母 | 含義 |
| C或c | Currency 貨幣格式 |
| D或d | Decimal 十進(jìn)制格式(十進(jìn)制整數(shù),不要和.Net的Decimal數(shù)據(jù)類(lèi)型混淆了) |
| E或e | Exponent 指數(shù)格式 |
| F或f | Fixed point 固定精度格式 |
| G或g | General 常用格式 |
| N或n | 用逗號(hào)分割千位的數(shù)字,比如1234將會(huì)被變成1,234 |
| P或p | Percentage 百分符號(hào)格式 |
| R或r | Round-trip 圓整(只用于浮點(diǎn)數(shù))保證一個(gè)數(shù)字被轉(zhuǎn)化成字符串以后可以再被轉(zhuǎn)回成同樣的數(shù)字 |
| X或x | Hex 16進(jìn)制格式 |
如果我們使用下面的表達(dá)方式,讓我們看看會(huì)發(fā)生什么
public class FormatSpecApp
{
public static void Main(string[] args)
{
int i = 123456;
Console.WriteLine("{0:C}", i); // ¥123,456.00
Console.WriteLine("{0:D}", i); // 123456
Console.WriteLine("{0:E}", i); // 1.234560E+005
Console.WriteLine("{0:F}", i); // 123456.00
Console.WriteLine("{0:G}", i); // 123456
Console.WriteLine("{0:N}", i); // 123,456.00
Console.WriteLine("{0:P}", i); // 12,345,600.00 %
Console.WriteLine("{0:X}", i); // 1E240
}
}
精度控制標(biāo)識(shí)控制了有效數(shù)字的個(gè)數(shù)或者十進(jìn)制數(shù)小數(shù)的位數(shù)。
Console.WriteLine("{0:C5}", i); // ¥123,456.00
Console.WriteLine("{0:D5}", i); // 123456
Console.WriteLine("{0:E5}", i); // 1.23456E+005
Console.WriteLine("{0:F5}", i); // 123456.00000
Console.WriteLine("{0:G5}", i); // 1.23456E5
Console.WriteLine("{0:N5}", i); // 123,456.00000
Console.WriteLine("{0:P5}", i); // 12,345,600.00000 %
Console.WriteLine("{0:X5}", i); // 1E240
R(圓整)格式僅僅對(duì)浮點(diǎn)數(shù)有效。這個(gè)值首先會(huì)用通用格式來(lái)格式化。對(duì)于雙精度數(shù)有15位精度,對(duì)于單精度數(shù)有7位精度。如果這個(gè)值可以被正確地解析回原始的數(shù)字,就會(huì)用通用格式符來(lái)格式化。如果不能解析回去的話(huà),那么就會(huì)用17位精度來(lái)格式化雙精度數(shù),用9位精度來(lái)格式化單精度數(shù)。盡管我們可以在圓整標(biāo)識(shí)符后面添加有效數(shù)字的位數(shù),但是它會(huì)被忽略掉。
double d = 1.2345678901234567890;
Console.WriteLine("Floating-Point:\t{0:F16}", d); // 1.2345678901234600
Console.WriteLine("Roundtrip:\t{0:R16}", d); // 1.2345678901234567
如果標(biāo)準(zhǔn)格式化標(biāo)識(shí)符還不能滿(mǎn)足你。你可以使用圖形化格式字符串來(lái)創(chuàng)建定制的字符串輸出。圖形化格式化使用占位符來(lái)表示最小位數(shù),
最大位數(shù),定位符號(hào),負(fù)號(hào)的外觀(guān)以及其它數(shù)字符號(hào)的外觀(guān)。就像下表所示
| 符號(hào) | 名稱(chēng) | 含義 |
| 0 | 0占位符 | 用0填充不足的位數(shù) |
| # | 數(shù)字占位符 | 用#代替實(shí)際的位數(shù) |
| . | 十進(jìn)制小數(shù)點(diǎn) | |
| , | 千位分隔符 | 用逗號(hào)進(jìn)行千位分割,比如把1000分割成1,000 |
| % | 百分符號(hào) | 顯示一個(gè)百分標(biāo)識(shí) |
| E+0 E-0 e+0 e-0 |
指數(shù)符號(hào) | 用指數(shù)符號(hào)格式化輸出 |
| \ | 專(zhuān)一字符 | 用于傳統(tǒng)格式的格式化序列,比如"\n"(新行) |
| 'ABC' "ABC" |
常量字符串 | 顯示單引號(hào)或者雙引號(hào)里面的字符串 |
| ; | 區(qū)域分隔符 | 如果數(shù)字會(huì)被格式化成整數(shù),負(fù)數(shù),或者0,用;來(lái)進(jìn)行分隔 |
| ,. | 縮放符號(hào) | 數(shù)字除以1000 |
看下面的例子:
double i = 123456.42;
Console.WriteLine();
Console.WriteLine("{0:000000.00}", i); //123456.42
Console.WriteLine("{0:00.00000000e+0}", i); //12.34564200e+4
Console.WriteLine("{0:0,.}", i); //123
Console.WriteLine("{0:#0.000}", i); // 123456.420
Console.WriteLine("{0:#0.000;(#0.000)}", i); // 123456.420
Console.WriteLine("{0:#0.000;(#0.000);<zero>}", i); // 123456.420
Console.WriteLine("{0:#%}", i); // 12345642%
i = -123456.42;
Console.WriteLine();
Console.WriteLine("{0:000000.00}", i); //-123456.42
Console.WriteLine("{0:00.00000000e+0}", i); //-12.34564200e+4
Console.WriteLine("{0:0,.}", i); //-123
Console.WriteLine("{0:#0.000}", i); // -123456.420
Console.WriteLine("{0:#0.000;(#0.000)}", i); // (123456.420)
Console.WriteLine("{0:#0;(#0);<zero>}", i); // (123456)
Console.WriteLine("{0:#%}", i); // -12345642%
i = 0;
Console.WriteLine();
Console.WriteLine("{0:0,.}", i); //0
Console.WriteLine("{0:#0}", i); // 0
Console.WriteLine("{0:#0;(#0)}", i); // 0
Console.WriteLine("{0:#0;(#0);<zero>}", i); // <zero>
Console.WriteLine("{0:#%}", i); // %
4 數(shù)字字符串的解析
所有的基礎(chǔ)類(lèi)型都有ToString方法,它是從object類(lèi)型中繼承過(guò)來(lái)的。所有的數(shù)值類(lèi)型都有Parse方法,它用字符串為參數(shù),并且返回相等的數(shù)值。比如
public class NumParsingApp
{
public static void Main(string[] args)
{
int i = int.Parse("12345");
Console.WriteLine("i = {0}", i);
int j = Int32.Parse("12345");
Console.WriteLine("j = {0}", j);
double d = Double.Parse("1.2345E+6");
Console.WriteLine("d = {0:F}", d);
string s = i.ToString();
Console.WriteLine("s = {0}", s);
}
}
輸出如下
i = 12345
j = 12345
d = 1234500.00
s = 12345
在缺省狀況下,某些非數(shù)字字符是可以存在的。比如開(kāi)頭和結(jié)尾的空白。逗號(hào)和小數(shù)點(diǎn),加號(hào)和減號(hào),因此,下面的Parse語(yǔ)句是一樣的
string t = " -1,234,567.890 ";
//double g = double.Parse(t); // 和下面的代碼干同樣的事情
double g = double.Parse(t,
NumberStyles.AllowLeadingSign |
NumberStyles.AllowDecimalPoint |
NumberStyles.AllowThousands |
NumberStyles.AllowLeadingWhite |
NumberStyles.AllowTrailingWhite);
Console.WriteLine("g = {0:F}", g);
輸出都是這樣
g = -1234567.89
注意到,如果你要使用NumberStyles,就要添加對(duì)System.Globalization的引用,然后就可以使用不同NumberStyles的組合或者其中的任意一種。如果你想兼容貨幣符號(hào),就需要使用重載的Parse方法,它們采用了NumberFormatInfo對(duì)象作為一個(gè)參數(shù),然后你可以設(shè)置NumberFormatInfo的CurrencySymbol屬性來(lái)調(diào)用Parse方法,比如:
string u = "¥ -1,234,567.890 ";
NumberFormatInfo ni = new NumberFormatInfo();
ni.CurrencySymbol = "¥";
double h = Double.Parse(u, NumberStyles.Any, ni);
Console.WriteLine("h = {0:F}", h);
上面的代碼有如下輸出
h = -1234567.89
除了NumberFormatInfo,還可以使用CultureInfo類(lèi)。CultureInfo代表了某種特定的文化,包括文化的名字,書(shū)寫(xiě)的方式,日歷的格式。對(duì)于某種特定文化的操作是非常普遍的情況,比如格式化日期和排序。文化的命名方式遵從RFC1766標(biāo)準(zhǔn),使用<語(yǔ)言代碼2>-<國(guó)家/地區(qū)碼2>的方式,其中的<語(yǔ)言代碼2>是兩個(gè)小寫(xiě)的字母,它們來(lái)自ISO639-1;<國(guó)家/地區(qū)碼2>是兩個(gè)大寫(xiě)字母,它們來(lái)自ISO3166。比如,美國(guó)英語(yǔ)是“en-US"。英國(guó)英語(yǔ)是"en-GB"。特立尼達(dá)和多巴哥英語(yǔ)是"en-TT"。例如,我們可以創(chuàng)建一個(gè)美國(guó)英語(yǔ)的CultureInfo對(duì)象并且基于這種文化將數(shù)字轉(zhuǎn)換成字符串。
int k = 12345;
CultureInfo us = new CultureInfo("en-US");
string v = k.ToString("c", us);
Console.WriteLine(v);
輸出是:
$12,345.00
要注意到,我們使用了重載的ToString方法,它把第一個(gè)格式化字符串當(dāng)成第一個(gè)參數(shù),將一個(gè)CultureInfo對(duì)象(執(zhí)行了IFormatProvider對(duì)象)作為第二個(gè)參數(shù)。這兒有第二個(gè)例子,對(duì)于丹麥人來(lái)說(shuō):
CultureInfo dk = new CultureInfo("da-DK");
string w = k.ToString("c", dk);
Console.WriteLine(w);
輸出是:
kr 12.345,00
5 字符串和日期
一個(gè)日期對(duì)象有個(gè)叫Ticks的屬性。它存儲(chǔ)了自從公元1年的1月1號(hào)上午12點(diǎn)開(kāi)始的,以100納秒為間隔的時(shí)間。比如,Ticks值等于31241376000000000L表示公元100年,星期五,1月1號(hào),上午12點(diǎn)這一時(shí)間。Ticks總是以100納秒為間隔遞增。
DateTime的值以存儲(chǔ)在DateTimeFormatInfo實(shí)例里面的標(biāo)準(zhǔn)或者自定義的方式來(lái)表示。為了修改一個(gè)日期顯示的方式,DateTimeFormatInfo實(shí)例必須要是可寫(xiě)的,以便我們寫(xiě)入自定義的格式并且存入屬性中
using System.Globalization;
public class DatesApp
{
public static void Main(string[] args)
{
DateTime dt = DateTime.Now;
Console.WriteLine(dt);
Console.WriteLine("date = {0}, time = {1}\n",
dt.Date, dt.TimeOfDay);
}
}
代碼會(huì)產(chǎn)生下面的輸出
23/06/2001 17:55:10
date = 23/06/2001 00:00:00, time = 17:55:10.3839296
下表列出了標(biāo)準(zhǔn)的格式字符串以及相關(guān)的DateTimeFormatInfo屬性
| D | ||
| D | MM/dd/yyyy | ShortDatePattern(短日期模式) |
| D | dddd,MMMM dd,yyyy | LongDatePattern(長(zhǎng)日期模式) |
| F | dddd,MMMM dd,yyyy HH:mm | Full date and time (long date and short time)(全日期和時(shí)間模式) |
| F | dddd,MMMM dd,yyyy HH:mm:ss | FullDateTimePattern (long date and long time)(長(zhǎng)日期和長(zhǎng)時(shí)間) |
| G | MM/dd/yyyy HH:mm | General (short date and short time)(通用模式,短日期和短時(shí)間) |
| G | MM/dd/yyyy HH:mm:ss | General (short date and long time)(通用模式,短日期和長(zhǎng)時(shí)間) |
| M,M | MMMM dd | MonthDayPattern(月天模式) |
| r,R | ddd,dd MMM yyyy,HH':'mm':'ss 'GMT' | RFC1123Pattern (RFC1123模式) |
| S | yyyy-MM-dd HH:mm:ss | SortableDateTimePattern (conforms to ISO 8601) using local time(使用本地時(shí)間的可排序模式) |
| T | HH:mm | ShortTimePattern (短時(shí)間模式) |
| T | HH:mm:ss | LongTimePattern(長(zhǎng)時(shí)間模式) |
| U | yyyy-MM-dd HH:mm:ss | UniversalSortable-DateTimePattern (conforms to ISO 8601) using universal time(通用可排序模式) |
| U | dddd,MMMM dd,yyyy,HH:mm:ss | UniversalSortable-DateTimePattern(通用可排序模式) |
| y,Y | MMMM,yyyy | YearMonthPattern(年月模式) |
DateTimeFormatInfo.InvariantInfo屬性得到了默認(rèn)的只讀的DateTimeFormatInfo實(shí)例,它與文化無(wú)關(guān)。你可以創(chuàng)建自定義的模式。要注意到的是InvariantInfo不一定和本地的格式一樣。Invariant等于美國(guó)格式。另外,如果你向DateTime.Format方法傳遞的第二個(gè)參數(shù)是null,DateTimeFormatInfo將會(huì)是默認(rèn)的CurrentInfo。比如
Console.WriteLine(dt.ToString("d", dtfi));
Console.WriteLine(dt.ToString("d", null));
Console.WriteLine();
輸出是
06/23/2001
23/06/2001
對(duì)比選擇InvariantInfo和CurrentInfo的。
DateTimeFormatInfo dtfi;
Console.Write("[I]nvariant or [C]urrent Info?: ");
if (Console.Read() == 'I')
dtfi = DateTimeFormatInfo.InvariantInfo;
else
dtfi = DateTimeFormatInfo.CurrentInfo;
DateTimeFormatInfo dtfi = DateTimeFormatInfo.InvariantInfo;
Console.WriteLine(dt.ToString("D", dtfi));
Console.WriteLine(dt.ToString("f", dtfi));
Console.WriteLine(dt.ToString("F", dtfi));
Console.WriteLine(dt.ToString("g", dtfi));
Console.WriteLine(dt.ToString("G", dtfi));
Console.WriteLine(dt.ToString("m", dtfi));
Console.WriteLine(dt.ToString("r", dtfi));
Console.WriteLine(dt.ToString("s", dtfi));
Console.WriteLine(dt.ToString("t", dtfi));
Console.WriteLine(dt.ToString("T", dtfi));
Console.WriteLine(dt.ToString("u", dtfi));
Console.WriteLine(dt.ToString("U", dtfi));
Console.WriteLine(dt.ToString("d", dtfi));
Console.WriteLine(dt.ToString("y", dtfi));
Console.WriteLine(dt.ToString("dd-MMM-yy", dtfi));
輸出是
[I]nvariant or [C]urrent Info?: I
01/03/2002
03/01/2002
Thursday, 03 January 2002
Thursday, 03 January 2002 12:55
Thursday, 03 January 2002 12:55:03
01/03/2002 12:55
01/03/2002 12:55:03
January 03
Thu, 03 Jan 2002 12:55:03 GMT
2002-01-03T12:55:03
12:55
12:55:03
2002-01-03 12:55:03Z
Thursday, 03 January 2002 12:55:03
01/03/2002
2002 January
03-Jan-02
[I]nvariant or [C]urrent Info?: C
03/01/2002
03/01/2002
03 January 2002
03 January 2002 12:55
03 January 2002 12:55:47
03/01/2002 12:55
03/01/2002 12:55:47
03 January
Thu, 03 Jan 2002 12:55:47 GMT
2002-01-03T12:55:47
12:55
12:55:47
2002-01-03 12:55:47Z
03 January 2002 12:55:47
03/01/2002
January 2002
03-Jan-02
/******************************************************************************************
*【Author】:flyingbread
*【Date】:2007年1月18日
*【Notice】:
*1、本文為原創(chuàng)技術(shù)文章,首發(fā)博客園個(gè)人站點(diǎn)(http://flyingbread.cnblogs.com/),轉(zhuǎn)載和引用請(qǐng)注明作者及出處。
*2、本文必須全文轉(zhuǎn)載和引用,任何組織和個(gè)人未授權(quán)不能修改任何內(nèi)容,并且未授權(quán)不可用于商業(yè)。
*3、本聲明為文章一部分,轉(zhuǎn)載和引用必須包括在原文中。
******************************************************************************************/
上一篇:詳解C#獲取特定進(jìn)程CPU和內(nèi)存使用率
欄 目:C#教程
下一篇:c#版在pc端發(fā)起微信掃碼支付的實(shí)例
本文標(biāo)題:C# 格式化字符串的實(shí)現(xiàn)代碼
本文地址:http://www.jygsgssxh.com/a1/C_jiaocheng/6171.html
您可能感興趣的文章
- 01-10C#通過(guò)反射獲取當(dāng)前工程中所有窗體并打開(kāi)的方法
- 01-10關(guān)于ASP網(wǎng)頁(yè)無(wú)法打開(kāi)的解決方案
- 01-10WinForm限制窗體不能移到屏幕外的方法
- 01-10WinForm繪制圓角的方法
- 01-10C#停止線(xiàn)程的方法
- 01-10WinForm實(shí)現(xiàn)仿視頻播放器左下角滾動(dòng)新聞效果的方法
- 01-10C#通過(guò)重寫(xiě)Panel改變邊框顏色與寬度的方法
- 01-10C#實(shí)現(xiàn)清空回收站的方法
- 01-10C#實(shí)現(xiàn)讀取注冊(cè)表監(jiān)控當(dāng)前操作系統(tǒng)已安裝軟件變化的方法
- 01-10C#實(shí)現(xiàn)多線(xiàn)程下載文件的方法


閱讀排行
- 1C語(yǔ)言 while語(yǔ)句的用法詳解
- 2java 實(shí)現(xiàn)簡(jiǎn)單圣誕樹(shù)的示例代碼(圣誕
- 3利用C語(yǔ)言實(shí)現(xiàn)“百馬百擔(dān)”問(wèn)題方法
- 4C語(yǔ)言中計(jì)算正弦的相關(guān)函數(shù)總結(jié)
- 5c語(yǔ)言計(jì)算三角形面積代碼
- 6什么是 WSH(腳本宿主)的詳細(xì)解釋
- 7C++ 中隨機(jī)函數(shù)random函數(shù)的使用方法
- 8正則表達(dá)式匹配各種特殊字符
- 9C語(yǔ)言十進(jìn)制轉(zhuǎn)二進(jìn)制代碼實(shí)例
- 10C語(yǔ)言查找數(shù)組里數(shù)字重復(fù)次數(shù)的方法
本欄相關(guān)
- 01-10C#通過(guò)反射獲取當(dāng)前工程中所有窗體并
- 01-10關(guān)于ASP網(wǎng)頁(yè)無(wú)法打開(kāi)的解決方案
- 01-10WinForm限制窗體不能移到屏幕外的方法
- 01-10WinForm繪制圓角的方法
- 01-10C#實(shí)現(xiàn)txt定位指定行完整實(shí)例
- 01-10WinForm實(shí)現(xiàn)仿視頻播放器左下角滾動(dòng)新
- 01-10C#停止線(xiàn)程的方法
- 01-10C#實(shí)現(xiàn)清空回收站的方法
- 01-10C#通過(guò)重寫(xiě)Panel改變邊框顏色與寬度的
- 01-10C#實(shí)現(xiàn)讀取注冊(cè)表監(jiān)控當(dāng)前操作系統(tǒng)已
隨機(jī)閱讀
- 01-10SublimeText編譯C開(kāi)發(fā)環(huán)境設(shè)置
- 01-10使用C語(yǔ)言求解撲克牌的順子及n個(gè)骰子
- 08-05織夢(mèng)dedecms什么時(shí)候用欄目交叉功能?
- 04-02jquery與jsp,用jquery
- 01-10delphi制作wav文件的方法
- 01-11ajax實(shí)現(xiàn)頁(yè)面的局部加載
- 08-05dedecms(織夢(mèng))副欄目數(shù)量限制代碼修改
- 01-10C#中split用法實(shí)例總結(jié)
- 01-11Mac OSX 打開(kāi)原生自帶讀寫(xiě)NTFS功能(圖文
- 08-05DEDE織夢(mèng)data目錄下的sessions文件夾有什


