續(xù)一周沒怎么更新了,今天我們繼續(xù)HTML的學(xué)習(xí),表格標(biāo)簽。表格是實際開發(fā)中常用的一種標(biāo)簽類型,會說到表格標(biāo)簽的主要作用和基本語法。
主要作用: 表格主要用于顯示、展示數(shù)據(jù),因為它可以讓數(shù)據(jù)展示的非常規(guī)整,可讀性非常好,特別是后臺展示數(shù)據(jù)的時候,能夠熟練運用表格非常重要。一個清爽簡約的表格可以把復(fù)雜的數(shù)據(jù)表現(xiàn)的很簡單。表格不是用來布局頁面的,而是用來展示數(shù)據(jù)的。
表格的基本語法: <table><tr><td></td></tr></table>
<table></table>用來定義表格標(biāo)簽
<tr></tr>用于定義表格中的行,嵌套在<table>標(biāo)簽中使用
<td></td>用于定義表格中的單元格,嵌套在<tr>標(biāo)簽中使用,字母td指表格數(shù)據(jù)(table data),即數(shù)據(jù)單元格的內(nèi)容。
我們來展示一個例子,比如 數(shù)據(jù)庫中有三個字段,分別為 姓名 性別和年齡,如果想用前端將這三個字段的數(shù)據(jù)展示出來,應(yīng)該怎么操作呢?
先看效果:
然后我們看下代碼:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>20210829---</title>
</head>
<body>
<table>
<tr> <td>姓名</td> <td>性別</td> <td>年齡</td> </tr>
</table>
</body>
</html>
這次開始使用vs code來編輯代碼了,感覺比sublime line高級一些,但是相對的也麻煩點。可以看到,在前端頁面展示了 姓名、性別和年齡。然后我們添加一行數(shù)據(jù),看效果:
民族英雄黃飛鴻如果還活著,應(yīng)該也是一位非常高壽的宗師了。多加幾個數(shù)據(jù)
讓我們看看代碼有什么不同
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>20210829---</title>
</head>
<body>
<table>
<tr> <td>姓名</td> <td>性別</td> <td>年齡</td> </tr>
<tr> <td>黃飛鴻</td> <td>男</td> <td>188</td> </tr>
<!--再多創(chuàng)建幾個數(shù)據(jù)-->>
<tr><td>鬼腳七</td> <td>男</td> <td>186</td> </tr>
<tr><td>梁寬</td> <td>男</td> <td>33</td> </tr>
</table>
</body>
</html>
可以看到,就是將之前的數(shù)據(jù)進(jìn)行了復(fù)制而已。
接著我們說下表頭單元格標(biāo)簽,一般表頭單元格位于表頭的第一行或第一列,表頭單元格里面的文本內(nèi)容,加粗居中表示。
<th>標(biāo)簽表示HTML表格的表頭部分,table head的縮寫
我們先來看下效果:
再看下對應(yīng)的代碼:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>20210829---</title>
</head>
<body>
<table>
<!--HTML表格的表頭標(biāo)簽,內(nèi)容加粗居中展示-->>
<tr> <th>姓名</th> <th>性別</th> <th>年齡</th> </tr>
<tr> <td>黃飛鴻</td> <td>男</td> <td>188</td> </tr>
<!--再多創(chuàng)建幾個數(shù)據(jù)-->>
<tr><td>鬼腳七</td> <td>男</td> <td>186</td> </tr>
<tr><td>梁寬</td> <td>男</td> <td>33</td> </tr>
</table>
</body>
</html>
就是將表格表頭那一行的<td>都換成了<th>,可以看到表頭每個字段都已經(jīng)居中并且加粗了。
最后我們說下表格的屬性,其實表格標(biāo)簽屬性這部分用的不多,一般都是用css樣式來設(shè)置。例如表格的邊框、大小等。我們需要關(guān)注的表格屬性目的,有2點:
align 屬性值: left right center 對應(yīng)表格相對周圍元素的對齊方式
border 屬性值 1或"" (空) 規(guī)定表格單元是否有邊框,默認(rèn)為空,表示沒有邊框
cellpadding 像素值 規(guī)定單元邊沿與其內(nèi)容之間的空白,默認(rèn)1像素
cellspacing 像素值 規(guī)定單元格之間的空白,默認(rèn)1像素
width 像素值或百分比 規(guī)定表格的寬度
我們來看下效果:
來看下代碼:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>20210829---</title>
</head>
<body>
<table align="center" border=1 cellpadding=1 cellspacing=1 width=500>
<!--HTML表格的表頭標(biāo)簽,內(nèi)容加粗居中展示-->>
<tr> <th>姓名</th> <th>性別</th> <th>年齡</th> </tr>
<tr> <td>黃飛鴻</td> <td>男</td> <td>188</td> </tr>
<!--再多創(chuàng)建幾個數(shù)據(jù)-->>
<tr><td>鬼腳七</td> <td>男</td> <td>186</td> </tr>
<tr><td>梁寬</td> <td>男</td> <td>33</td> </tr>
</table>
</body>
</html>
記住,屬性都是在table處添加和修改的,因為我們是對整個table的設(shè)置值。
好的,今天就先到這里了,大家周末愉快
T ___ InformationTechnology 信息技術(shù)
POP ___ Procedure-Oriented Programming 面向過程編程
OOA ___ Object Oriented Analysis 面對對象分析
OOD ___ Object Oriented Design 面對對象設(shè)計
OOP ___ Object Oriented Programming 面向?qū)ο缶幊?/span>
IOP ___ Interface-Oriented Programming 面向接口編程
AOP ___ Aspect Oriented Programming 面向切面編程
SOA ___ service-oriented architecture 面向服務(wù)的體系結(jié)構(gòu)
IDE ___ Integrated Development Environment 集成開發(fā)環(huán)境
GUI ___ Graphical User Interface 圖形用戶界面
API ___ Application Programming Interface 應(yīng)用編程接口
COM ___ Component Object Model 組件對象模型
dll ___ dynamic linked library 動態(tài)鏈接庫
GDI ___ Graphics Device Interface 圖形設(shè)備接口
GUI ___ Graphics Unser Interface 圖形用戶界面
Big O notation ___ Order 階,Order of Growth, lower- order, high - order
DOS ___Disc Operating System 磁盤操作系統(tǒng)
UML ___ nified Modeling Language統(tǒng)一建模語言
MVC ___ Model–view–controller 模型、視圖和控制器,MVC 模式的目的是實現(xiàn)一種動態(tài)的程序設(shè)計。
.net ___ NET Framework .Net框架,是由微軟開發(fā),一個致力于敏捷軟件開發(fā)(Agile software development)、快速應(yīng)用開發(fā)(Rapid application development)、平臺無關(guān)性和網(wǎng)絡(luò)透明化的軟件開發(fā)平臺。.NET框架是以一種采用系統(tǒng)虛擬機(jī)運行的編程平臺,以通用語言運行庫(Common Language Runtime)為基礎(chǔ),支持多種語言(C#、VB、C++、Python等)的開發(fā)。NET也為應(yīng)用程序接口(API)提供了新功能和開發(fā)工具。這些革新使得程序設(shè)計員可以同時進(jìn)行Windows應(yīng)用軟件和網(wǎng)絡(luò)應(yīng)用軟件以及組件和服務(wù)(web服務(wù))的開發(fā)。.NET提供了一個新的反射性的且面向?qū)ο蟪绦蛟O(shè)計編程接口。.NET設(shè)計得足夠通用化從而使許多不同高級語言都得以被匯集。.NET Framework中的所有語言都提供基類庫(BCL)。
目錄:
0 匯編
1 C
2 C++
3 VC里面的一些類型定義和縮寫
4 Java
5 數(shù)據(jù)結(jié)構(gòu)與算法
6 HTML、CSS、Javascript
7 數(shù)據(jù)庫相關(guān)
8 網(wǎng)絡(luò)和服務(wù)端編程相關(guān)
9 硬件相關(guān)
10 others
11 附
lea ___ Load effective address
je ___ Jump if equal
leave—Leave function
mov rsp, rbp
pop rbp
jmp ___ Jump
jne ___ Jump Not Equal
jng ___ Jump Not greater than
jnl ___ Jump Not less than
jo ___ Jump Overflow
jnc ___ Jump No carry
inc ___ Increment Adds 1 to a variable.
BSS ___ Block Started by Symbol, Better Save Space
typedef ___ type definition
malloc() ___ memory allocate
atof() ___ anscii to float
seekp() ___ seek put pointer
seekg() ___ seek get pointer
strpbrk() ___ string pointer break
strcspn() ___ string complement span
isxdigit() ___ is hexadecimal digit
strtok() ___ string to tokenize
strrchr() ___ string right character
isalnurn() ___ is alpha and numeric?
isalpha() ___ is alphabetic?
#ifndef ___ if not defined
gdb___ GNU Debugger
RAII ___ Resource Acquisition Is Initialization 資源獲取即初始化
RTTI ___ Run-Time Type Identification 運行時類型識別
STL ___ Standard Template Library
ios::app ___ appends: Always appends at the end when writing
ios::ate ___ at end: Positions at the end of the file after opening
ios::trunc ___ truncate: Removes the former file contents
IOC ___ Inversion of Control 控制反轉(zhuǎn),是面向?qū)ο缶幊讨械囊环N設(shè)計原則,可以用來減低計算機(jī)代碼之間的耦合度。其中最常見的方式叫做依賴注入(Dependency Injection,簡稱DI),還有一種方式叫“依賴查找”(Dependency Lookup)。通過控制反轉(zhuǎn),對象在被創(chuàng)建的時候,由一個調(diào)控系統(tǒng)內(nèi)所有對象的外界實體,將其所依賴的對象的引用傳遞給它。也可以說,依賴被注入到對象中。
deque ___ double ended queue
POD ___ Plain Old Data 傳統(tǒng)的C風(fēng)格的struct叫做POD對象。其二進(jìn)制內(nèi)容是可以隨便復(fù)制的,在任何地方,只要其二進(jìn)制內(nèi)容在,就能還原出正確無誤的POD對象。memcpy,memset有很強(qiáng)的限制,僅能用于POD結(jié)構(gòu),不能作用于stl容器或者帶有虛函數(shù)的類。帶虛函數(shù)的類對象會有一個虛函數(shù)表的指針,memcpy將破壞該指針指向。
MFC ___ Microsoft Foundation Classes 微軟基礎(chǔ)類庫,是一個微軟公司提供的類庫(class libraries),以C++類的形式封裝了Windows的API,并且包含一個應(yīng)用程序框架,以減少應(yīng)用程序開發(fā)人員的工作量。其中包含的類包含大量Windows句柄封裝類和很多Windows的內(nèi)建控件和組件的封裝類。
WPF___ Windows Presentation Foundation 微軟推出的基于Windows Vista的用戶界面框架,屬于.NET Framework 3.0的一部分。它提供了統(tǒng)一的編程模型、語言和框架,真正做到了分離界面設(shè)計人員與開發(fā)人員的工作;同時它提供了全新的多媒體交互用戶圖形界面。
LPCTSTR 是Win32 自定義數(shù)據(jù)類型, 是以null 結(jié)尾的字符串。
void CWnd::SetWindowText(LPCTSTR lpszString);
LP 表示長指針,在Win32 系統(tǒng)中指針沒有長短之分,LP 和P 等同。
C 表示const 常量。
T 表示TCHAR。
STR 表示字符串, 等同于const TCHAR *。
sz: string terminated with zero由于字符集分為ANSI 和Unicode 兩種,對應(yīng)char 和wchar_t 兩種字符類型,TCHAR 是個宏定義,它根據(jù)開發(fā)環(huán)境的設(shè)置不同自動替換為char 或wchar_t, 使用TCHAR可以增強(qiáng)程序的可移植。
cbWndExtra ___ count of byte
GetDeviceCaps ___ Get Device's Capacities
WM_NCHITTEST ___ Not Client
DefWindowProc ___ Default
WM_TIMER ___ Windows Message
CBN_SELCHANGE ___ comboBox Notify
variable nam-ing notation:
b Boolean (true or false)
w Word, 16-bit integer
i Integer, 16-bit integer (conflicts with w )
n Short, 16-bit integer (conflicts with w )
n Near pointer (ambiguous, can be used for " short ")
p Pointer
d Double, 32-bit integer
dw Double word, 32-bit integer (conflicts with d)
l Long, 32-bit integer (conflicts with d )
fn Function (or pointer to function)
g Global
s String
sz String terminated with zero (conflicts with s )
c character
by byte (unsigned character)
h Window handle
hn Window handle (conflicts with h )
JDK ____ Java Development Kit, The software for consumers who want to run Java programs.
JRE ___ Java Runtime Environment, The software for running Java programs on servers.
SE ___ Standard Edition, The Java platform for use on desktops and simple server applications.
EE ___ Enterprise Edition, The Java platform for complex server applications.
ME ___ Micro Edition, The Java platform for use on cell phones and other small devices.
AWT ___ Abstract Windowing Toolkit 抽象窗口工具包
JAR ___ Java ARchive
GC ___ Garbage Collection 一種自動的內(nèi)存管理機(jī)制。
FIFO ___ First Input First Output,先入先出(隊列)
LIFO ___ last in,first out,后進(jìn)先出(棧)
BST ___ binary search tree,二叉搜索樹
DFS ___Deepness First Search,深度優(yōu)先搜索
BFS ___ Breadth-First Search,廣度優(yōu)先搜索算法
DP ___ Dynamic Programming,動態(tài)規(guī)劃算法,一種實現(xiàn)記憶搜索的分治法
AVL trees ___ were invented in 1962 by two Russian computer scientists, G. M. Adelson-Velsky and E. M. Landis. An AVL tree is a well-balanced binary tree. In an AVL tree, the difference between the heights of two subtrees for every node is 0 or 1.
KMP algorithm ___ The Knuth-Morris-Pratt algorithm
HTTP ___ HyperText Transfer Protocol 超文本傳輸協(xié)議,是一種用于分布式、協(xié)作式和超媒體信息系統(tǒng)的應(yīng)用層協(xié)議。HTTP是萬維網(wǎng)的數(shù)據(jù)通信的基礎(chǔ)。
CSS ___ Cascading Style Sheet 級聯(lián)樣式表,是用來進(jìn)行網(wǎng)頁風(fēng)格設(shè)計的。比如,如果想讓鏈接字未點擊時是藍(lán)色的,當(dāng)鼠標(biāo)移上去后字變成紅色的且有下劃線,這就是一種風(fēng)格。通過設(shè)立樣式表,可以統(tǒng)一地控制HMTL中各標(biāo)志的顯示屬性。級聯(lián)樣式表可以使人更能有效地控制網(wǎng)頁外觀。使用級聯(lián)樣式表,可以擴(kuò)充精確指定網(wǎng)頁元素位置,外觀以及創(chuàng)建特殊效果的能力。
AJAX ___ Asynchronous JavaScript and XML”(異步的 JavaScript 與 XML 技術(shù)),指的是一套綜合了多項技術(shù)的瀏覽器端網(wǎng)頁開發(fā)技術(shù)。
JSON ___ JavaScript Object Notation 一種輕量級的數(shù)據(jù)交換語言,以文字為基礎(chǔ),且易于讓人閱讀。盡管 JSON 是 Javascript 的一個子集,但JSON是獨立于語言的文本格式,并且采用了類似于 C語言 家族的一些習(xí)慣。
XML ___ eXtensible Markup Language 可擴(kuò)展標(biāo)記語言,是一種標(biāo)記語言。標(biāo)記指計算機(jī)所能理解的信息符號,通過此種標(biāo)記,計算機(jī)之間可以處理包含各種信息的文章等。如何定義這些標(biāo)記,既可以選擇國際通用的標(biāo)記語言,比如HTML,也可以使用像XML這樣由相關(guān)人士自由決定的標(biāo)記語言,這就是語言的可擴(kuò)展性。XML是從標(biāo)準(zhǔn)通用標(biāo)記語言(SGML)中簡化修改出來的。它主要用到的有可擴(kuò)展標(biāo)記語言、可擴(kuò)展樣式語言(XSL)、XBRL和XPath等。
ASP ___ Active Server Page 動態(tài)服務(wù)器頁面,是微軟公司開發(fā)的代替CGI腳本程序的一種應(yīng)用,它可以與數(shù)據(jù)庫和其它程序進(jìn)行交互,是一種簡單、方便的編程工具,運行于 IIS 之中的程序。ASP的網(wǎng)頁文件的格式是.asp,常用于各種動態(tài)網(wǎng)站中。
DOM ___ Document Object Model 文檔目標(biāo)模型
NaN ___ Not a Number
<a></a> ___ anchor
<h3></h3> ___ header level 3
<p></p> ___ paragraph
<tr></tr> ___ table row
<th></th> ___ table head
<td></td> ___ table data
DML ___ Data Manipulation Language 數(shù)據(jù)操縱語言 SQL 語言中,負(fù)責(zé)對數(shù)據(jù)庫對象運行數(shù)據(jù)訪問工作的指令集,以 INSERT、UPDATE、DELETE 三種指令為核心,分別代表插入、更新與刪除,是開發(fā)以數(shù)據(jù)為中心的應(yīng)用程序必定會使用到的指令,因此有很多開發(fā)人員都把加上SQL的SELECT語句的四大指令以“CRUD”來稱呼
ADO ___ ActiveX Data Objects) 是一個用于存取數(shù)據(jù)源的COM組件。它提供了編程語言和統(tǒng)一數(shù)據(jù)訪問方式OLE DB的一個中間層。允許開發(fā)人員編寫訪問數(shù)據(jù)的代碼而不用關(guān)心數(shù)據(jù)庫是如何實現(xiàn)的,而只用關(guān)心到數(shù)據(jù)庫的連接。
SQL ___ Structured Query Language 結(jié)構(gòu)化查詢語言,是一種特定目的程序語言,用于管理關(guān)系數(shù)據(jù)庫管理系統(tǒng)(RDBMS),或在關(guān)系流數(shù)據(jù)管理系統(tǒng)(RDSMS)中進(jìn)行流處理。
NoSQL 是對不同于傳統(tǒng)的關(guān)系數(shù)據(jù)庫的數(shù)據(jù)庫管理系統(tǒng)的統(tǒng)稱。
DNS ___ Domain Name System 域名系統(tǒng),是互聯(lián)網(wǎng)的一項服務(wù)。它作為將域名和IP地址相互映射的一個分布式數(shù)據(jù)庫,能夠使人更方便地訪問互聯(lián)網(wǎng)。DNS使用TCP和UDP端口53。當(dāng)前,對于每一級域名長度的限制是63個字符,域名總長度則不能超過253個字符。
CGI ___ Common Gateway Interface 通用網(wǎng)關(guān)接口,是一個Web服務(wù)器主機(jī)提供信息服務(wù)的標(biāo)準(zhǔn)接口。通過CGI接口,Web服務(wù)器就能夠獲取客戶端提交的信息,轉(zhuǎn)交給服務(wù)器端的CGI程序進(jìn)行處理,最后返回結(jié)果給客戶端。組成CGI通信系統(tǒng)的是兩部分:一部分是html頁面,就是在用戶端瀏覽器上顯示的頁面。另一部分則是運行在服務(wù)器上的Cgi程序。servlet是CGI替代品。
IIS ___ Internet Information Services 互聯(lián)網(wǎng)信息服務(wù),是由微軟公司提供的基于運行Microsoft Windows的互聯(lián)網(wǎng)基本服務(wù)。最初是Windows NT版本的可選包,隨后內(nèi)置在Windows 2000、Windows XP Professional和Windows Server 2003一起發(fā)行,但在Windows XP Home版本上并沒有IIS。
C/S ___ Client/Server 客戶端-服務(wù)器架構(gòu),是一種網(wǎng)絡(luò)架構(gòu),它把客戶端 (Client) (通常是一個采用圖形用戶界面的程序)與服務(wù)器 (Server) 區(qū)分開來。每一個客戶端軟件的實例都可以向一個服務(wù)器或應(yīng)用程序服務(wù)器發(fā)出請求。有很多不同類型的服務(wù)器,例如文件服務(wù)器、游戲服務(wù)器等。
FTP ___ File Transfer Protocol 文件傳輸協(xié)議
ADSL ___ Asymetrical Digital Subscriber Line 非對稱數(shù)字用戶線路
ARP ___ Address resolution Protocol 地址解析協(xié)議
ICMP ___ Internet Control and Message Protocol Internet控制消息協(xié)議
ICP ___ Internet Content Provider 互聯(lián)網(wǎng)內(nèi)容供應(yīng)商
IMAP ___ Internet message Access Protocol 報文存取協(xié)議
IP ___ Internet Protocol 網(wǎng)際協(xié)議
LAN ___ Local Area Network 局域網(wǎng)
PING ___ Packet Internet Grable
PPPOE ___ Point to Point Protocol Over Ethernet
POP3 ___ Post Office Protocol Version 3
CPU ___ Central Process Unit 中央處理單元
ALU ___ arithmetic and logic unit 算術(shù)邏輯單元
BIOS ___ Basic Input Output System 基本輸入輸出系統(tǒng)
ROM ___ Rread_Only Memory 只讀存儲器
EPROM ___ erasable programmable ROM 可擦寫可編程ROM
SRAM ____ Static Ramdom Access Memory 靜態(tài)隨機(jī)存儲器
GPU Graphic Processing Unit
PCI ___ Peripheral component Interconnection 互聯(lián)外圍設(shè)備
DPI Dots Per Inch 每英寸點數(shù)
JVM ___ Java Virtual Machine Java 虛擬機(jī),是一種用于計算設(shè)備的規(guī)范,它是一個虛構(gòu)出來的計算機(jī),是通過在實際的計算機(jī)上仿真模擬各種計算機(jī)功能來實現(xiàn)的。Java虛擬機(jī)包括一套字節(jié)碼指令集、一組寄存器、一個棧、一個垃圾回收堆和一個存儲方法域。 JVM屏蔽了與具體操作系統(tǒng)平臺相關(guān)的信息,使Java程序只需生成在Java虛擬機(jī)上運行的目標(biāo)代碼(字節(jié)碼),就可以在多種平臺上不加修改地運行。JVM在執(zhí)行字節(jié)碼時,實際上最終還是把字節(jié)碼解釋成具體平臺上的機(jī)器指令執(zhí)行。編譯虛擬機(jī)的指令集與編譯微處理器的指令集非常類似。
RA ___ Requirement Analysis 需求分析
IEEE___ Institute of Electrical and Electronic Engineer 電子電氣工程師協(xié)會
GIF ___ Graphics Interchange Format
JPEG ___ Joint Photographic Expert Group 一個靜態(tài)圖壓縮標(biāo)準(zhǔn)
MP3 ___ MPEG Audio Layer3
MPEG ___ Moving Picture Expert Group 動態(tài)圖像專家
OCR Optical Character Recognition 光學(xué)字符識別
OLE ObjectLinking and Embedding 對象連接與嵌入,簡稱OLE技術(shù)
PDF ___ Portal Document Format 可移植文檔格式
PHP ___ Hypertext Proprocessor 超文本預(yù)處理器
PNP ___ Plug and Play
POST ____ Power On Self Test
11.1 英文縮寫搜索
http://m.shortof.com/
11.2 一些英文縮寫
縮寫 | 全稱 |
addr | Address |
adm | Administrator |
app | Application |
arg | Argument |
asm | assemble |
asyn | asynchronization |
avg | average |
DB | Database |
bk | back |
bmp | Bitmap |
btn | Button |
buf | Buffer |
calc | Calculate |
char | Character |
chg | Change |
clk | Click |
clr | color |
cmd | Command |
cmp | Compare |
col | Column |
coord | coordinates |
cpy | copy |
ctl / ctrl | Control |
cur | Current |
cyl | Cylinder |
dbg | Debug |
dbl | Double |
dec | Decrease |
def | default |
del | Delete |
dest / dst | Destination |
dev | Device |
dict | dictionary |
diff | different |
dir | directory |
disp | Display |
div | Divide |
dlg | Dialog |
doc | Document |
drv | Driver |
dyna | Dynamic |
env | Environment |
err | error |
ex/ext | Extend |
exec | execute |
flg | flag |
frm | Frame |
func / fn | Function |
grp | group |
horz | Horizontal |
idx / ndx | Index |
img | Image |
impl | Implement |
inc | Increase |
info | Information |
init | Initial/Initialize/Initialization |
ins | Insert |
inst | Instance |
INT / intr | Interrupt |
len | Length |
lib | Library |
lnk | Link |
log | logical |
lst | List |
max | maximum |
mem | Memory |
mgr / man | Manage / Manager |
mid | middle |
min | minimum |
msg | Message |
mul | Multiply |
num | Number |
obj | Object |
ofs | Offset |
org | Origin / Original |
param | Parameter |
pic | picture |
pkg | package |
pnt / pt | Point |
pos | Position |
pre / prev | previous |
prg | program |
prn | |
proc | Process / Procedure |
prop | Properties |
psw | Password |
ptr | Pointer |
pub | Public |
rc | rect |
ref | Reference |
reg | Register |
req | request |
res | Resource |
ret | return |
rgn | region |
scr | screen |
sec | Second |
seg | Segment |
sel | Select |
src | Source |
std | Standard |
stg | Storage |
stm | Stream |
str | String |
sub | Subtract |
sum | summation |
svr | Server |
sync | Synchronization |
sys | System |
tbl | Table |
temp / tmp | Temporary |
tran / trans | translate/transation/transparent |
tst | Test |
txt | text |
unk | Unknown |
upd | Update |
upg | Upgrade |
util | Utility |
var | Variable |
ver | Version |
vert | Vertical |
vir | Virus |
wnd | Window |
-End-
- 作者 謝恩銘 轉(zhuǎn)載請注明出處
《Linux探索之旅》全系列
內(nèi)容簡介
前言
成果展示
解題步驟和答案
可能的優(yōu)化
第五部分第九課預(yù)告
1. 前言
上一課 Linux探索之旅 | 第五部分第七課:Shell實現(xiàn)圖片展示網(wǎng)頁 中,我們做了一個有趣的練習(xí)。
這個練習(xí)用一個 Shell 腳本來生成一個 HTML 文件,這個 HTML 文件是一個展示圖片縮略圖的網(wǎng)頁,點擊每個縮略圖還會鏈接到原始圖片。
這一課我們繼續(xù)做一個進(jìn)階的 Shell 腳本練習(xí)。這個練習(xí)要實現(xiàn)的是對一個英語字典做統(tǒng)計。
通過這個練習(xí),你將鞏固 Shell 和 Linux 的知識點。
為了完成它,我們需要用到一個文本文件:words.txt。這是一個包含 354935 個英文單詞的字典,請從我的 Github 上下載 (下面也會給出百度云盤下載鏈接):
https://github.com/frogoscar/english-dictionary
你可以選擇 git clone 到你本地目錄,或者下載 zip 壓縮包。然后提取里面的 words.txt 文件即可。
對于 Git 和 Github 的使用有任何疑問,歡迎閱讀我的文章 :Git,Github和Gitlab簡介和基本使用
對于不用 Github 的朋友,我也把字典文件上傳到百度云盤了,請 點我下載 。
當(dāng)然了,如果你自己能在網(wǎng)上找到其他完整的英文字典的文本文檔也可以,不一定要用我這個。
2. 成果展示
我們要用到的字典文本文檔里的內(nèi)容類似如下:
字典開頭
字典結(jié)尾
我們要寫一個 Shell 腳本,來顯示這個龐大的字典中 26 個英文字母(從 a 到 z )出現(xiàn)的次數(shù),而且以次數(shù)最多到最少的順序排列。
成果是像下面這樣的:
可以看到,字母 e 出現(xiàn)的次數(shù)最多,是 363325 次; 字母 j 出現(xiàn)的次數(shù)最少,是 5073 次。
下面給出我的解題步驟和答案,希望大家最好先不看答案,嘗試著自己解決問題,然后再來看答案。
你的解法也許比我還要好。相信你可以的,加油!
3. 解題步驟和答案
首先,我們創(chuàng)建一個文件夾,然后把 words.txt 這個字典文件放進(jìn)去。
然后,我們在文件夾中創(chuàng)建一個文件,就是我們的腳本,叫 statistics.sh 好了,因為 statistics 是英語「統(tǒng)計」的意思。
vim statistics.sh
因為這個練習(xí)涉及到數(shù)據(jù)的處理,所以可以回去參考 Linux探索之旅 | 第三部分第一課:數(shù)據(jù)處理,慢條斯理 那一課。
還有 「管道、流、重定向」 ( Linux探索之旅 | 第三部分第二課:流、管道、重定向,三管齊下 )等等。
你也許還會在使用一些命令時忘了如何用,那你可以查一下命令的使用手冊 ( Linux探索之旅 | 第二部分第八課:RTFM 閱讀那該死的手冊 )。
根據(jù)上面的成果那張截圖,我們可以看到要實現(xiàn)的是 :
「在終端打印出結(jié)果,按照字母出現(xiàn)的次數(shù)來排列,由最多到最少。在次數(shù)左邊,依次是 該次數(shù)對應(yīng)的字母、空格、短橫杠、空格。而且每個字母是大寫的(在字典文件中字母都是小寫,因此需要小寫到大寫的轉(zhuǎn)換)」。
因此,我們首先需要統(tǒng)計每個字母出現(xiàn)的次數(shù)。
怎么做呢?我們想到了 grep 命令,它可以幫助我們在文件中查找所需的字母。
我們首先用命令行來測試,之后再著手編寫我們的 statistics.sh 這個文件。
首先,在命令行中輸入以下命令:
grep -io a words.txt
回車運行后可以看到輸出了許多行,每一行包含一個 a。
因為 grep 就是用于在文件中查找關(guān)鍵字,并且顯示關(guān)鍵字所在的行。
這里我們用了 -i 和 -o 兩個參數(shù)。-i 參數(shù)我們之前學(xué)過,是 ignore-case 的簡寫,表示「忽略大小寫」。
而-o 這個參數(shù)我們之前沒學(xué)過,不過可以用 man grep
來看看:
man grep
可以看到 -o 參數(shù)中的 o 是英語 only-matching 的簡寫,表示「只匹配」。其描述 「 Print only the matched (non-empty) parts of a matching line, with each such part on a separate output line. 」可以翻譯為 「只顯示匹配行中不為空的那個匹配的部分,每個這樣的部分被單獨顯示在一行上」。
如果不加 -o 參數(shù)而直接用
grep -i a words.txt
那么輸出是這樣的:
理解了嗎?不加 -o 參數(shù),那么 grep 就會輸出每一個包含 a 的行。而每一行 (字典文件中一行有一個單詞)也許包含不止一個 a。因此為了統(tǒng)計所有的 a,我們須要加上 -o 參數(shù)。
既然我們已經(jīng)用 grep -io a words.txt
命令來輸出了所有字母 a 的 出現(xiàn)(逐行顯示),那么我們可以用 wc -l
命令來統(tǒng)計行數(shù),即可知道 a 的出現(xiàn)次數(shù)了。
接下來我們就用管道來把 grep 命令的結(jié)果賦給 wc 命令:
grep -io a words.txt | wc -l
可以看到輸出是 273400,表示 words.txt 文件中字母 a 出現(xiàn)了 273400 次。
我們也可以不加 -o 參數(shù)來測試一下:
grep -i a words.txt | wc -l
可以看到輸出是 206518,比 273400 少了很多,因為不加 -o 參數(shù)只統(tǒng)計了 a 出現(xiàn)的那些行(相當(dāng)于統(tǒng)計了包含 a 的單詞數(shù)目),而不是統(tǒng)計 a 的真正出現(xiàn)次數(shù)。
我們現(xiàn)在已經(jīng)知道如何統(tǒng)計字母 a 的次數(shù)了,那么舉一反三,統(tǒng)計其他 25 個字母也不在話下。我們可以用一個循環(huán)語句來實現(xiàn):
for char in {a..z}; do
可以看到我們在終端輸入 for 循環(huán)語句后,依次打印出了 a, b, c, 一直到 z 這 26 個字母在 words.txt 文件中出現(xiàn)的次數(shù)。
雖然現(xiàn)在我們只是開了個頭,但是已經(jīng)可以來寫我們的 Shell 腳本了。
我們首先寫一些基礎(chǔ)的部分:
#!/bin/bash# Verification of parameter# 確認(rèn)參數(shù)if [ -z ]
上面兩段代碼分別用于確認(rèn)參數(shù)和確認(rèn)文件存在,如果不滿足 if 條件,那么用 echo 顯示提示信息,然后用 exit 命令退出 Shell。
然后,我們來定義一個函數(shù),就叫 statistics 好了,我們繼續(xù)在 statistics.sh 這個文件中加入以下代碼:
# Definition of function# 函數(shù)定義statistics () { for char in {a..z}
for char in {a..z}
不難理解,用于遍歷 a 到 z 這 26 個英語字母。
echo "$char - `grep -io "$char" | wc -l`"
這句首先用 echo 命令輸出 char 變量的值 (依次取值 a 到 z ),然后輸出一個空格,輸出短橫杠,再輸出一個空格,然后輸出 grep -io "$char" | wc -l
這句命令的運行結(jié)果,也就是 char 變量對應(yīng)的字母的出現(xiàn)次數(shù) 。
我們運行這個腳本(別忘了用 chmod +x statistics.sh
為腳本加上可執(zhí)行權(quán)限):
./statistics.sh words.txt
可以看到我們的腳本文件如我們所愿從 a 到 z 輸出了這 26 個字母,格式也是我們需要的:
字母 - 出現(xiàn)次數(shù)
但是,目前我們的字母沒有大寫,而且還不是按出現(xiàn)次數(shù)最多到最小排序的,因此我們還要繼續(xù)探索。
為了使 echo 命令的輸出中的小寫字母被轉(zhuǎn)成大寫,我們可以用 tr 命令。tr 是 translate 的縮寫,表示「翻譯,轉(zhuǎn)化」。
我們的函數(shù)改為如下:
# Definition of function# 函數(shù)定義statistics () { for char in {a..z}
tr /a-z/ /A-Z/
表示把所有 a 到 z 的小寫字母轉(zhuǎn)為對應(yīng)的大寫字母 A-Z。
這下我們的字母已經(jīng)都變成大寫了,我們還剩最后一點沒做:對這 26 行輸出根據(jù)字母出現(xiàn)次數(shù)排序。
為了實現(xiàn)這個,我們需要用到 sort 命令,sort命令用于對文件的行進(jìn)行排序。
我們還需要一個中轉(zhuǎn)的文件,用于暫時儲存我們的 echo 命令循環(huán)輸出的這 26 行數(shù)據(jù)。
因此我們可以用輸出重定向來把 echo "$char - `grep -io "$char" | wc -l`" | tr /a-z/ /A-Z/
的結(jié)果依次寫入一個文件,比如取名為 tmp.txt。
然后再用 sort 命令對這個文件的行進(jìn)行排序,把排序結(jié)果顯示到終端。
我們的函數(shù)改為如下:
# Definition of function# 函數(shù)定義statistics () { for char in {a..z}
我們在 echo "$char - `grep -io "$char" | wc -l`" | tr /a-z/ /A-Z/
之后加了 >> tmp.txt
,以把輸出重定向到文件 tmp.txt 末尾。
然后用 sort 命令對 tmp.txt 文件中的行進(jìn)行排序。
我們用了 sort 命令的 -r,-n,-k 和 -t 四個參數(shù)。
其中 -r 和 -n 參數(shù)我們比較熟悉,-n 參數(shù)用于對數(shù)字排序,-r 參數(shù)用于倒序排列。
-k 參數(shù)用于指定根據(jù)哪幾列進(jìn)行排序,這里用 -k 2
表示根據(jù)第 2 列來排序。
-t 參數(shù)用于指定列和列之間用什么作為分隔符,這里用 -t -
表示分隔符是 - 。
然后每次我們都要把 tmp.txt 這個臨時文件刪除,用 rm tmp.txt
。
我的最終代碼:
#!/bin/bash# Verification of parameter # 確認(rèn)參數(shù)if [ -z $1 ]
上面只是我的解法,你的解題思路和代碼當(dāng)然不必和我一樣。而且我也非常肯定我的代碼不夠優(yōu)。
我相信各位能想出更好的解法,歡迎留言補(bǔ)充(如果留言支持代碼,可以把你的代碼貼出來)。
這個程序雖然短小,但是我們用到了 Linux 中的 grep 命令,sort 命令,wc 命令,rm 命令,echo 命令,exit 命令,管道 ( | ),重定向( >> )。Shell 中的條件語句 ( if ),循環(huán)語句 ( for ),函數(shù),等知識點。
4. 可能的優(yōu)化
我給出的解方是基礎(chǔ)的,你可以自由發(fā)揮。
下面提出幾點優(yōu)化的設(shè)想:
除了第一個參數(shù),也就是要統(tǒng)計的字典文件的名字,我們還可以添加其他參數(shù),來完成更多任務(wù)。
改變輸出的形式,使之更美觀。
每一行可以輸出更多信息。
嘗試不借助中間文件 tmp.txt。
其他優(yōu)化,就有待大家去發(fā)揮自己的想象力咯!
5. 第五部分第九課預(yù)告
今天的課就到這里,一起加油吧!
下一課我們來做一些測試吧 :第五部分測試題
然后就進(jìn)入第六部分了。
微信公眾號「程序員聯(lián)盟」ProgrammerLeague
我是[謝恩銘](http://www.jianshu.com/u/44339a8a9afa),在巴黎奮斗的軟件工程師。
[我的簡介](http://www.jianshu.com/p/e1c5835fee7d)
[我的經(jīng)歷](http://www.jianshu.com/p/86c2cfe3b390)
熱愛生活,喜歡游泳,略懂烹飪。
人生格言:“向著標(biāo)桿直跑”
*請認(rèn)真填寫需求信息,我們會在24小時內(nèi)與您取得聯(lián)系。