本教学视频的关键步骤提示如下:
1、激活线路图形文件(dwg),并进入删除杆塔页面;
2、点击进入调整,在线路图形文件(dwg)作图区域删除某一基或多基杆塔,即可看到删除后的效果;
3、点击结束调整。
关注新闻时事、普及文史知识、推荐应用软件、提供资料下载、交流学习心得、发表个性博客
1219年秋,蒙古大军进军到花剌子模边疆后,兵分四路先扫清外围,然后重点进攻新都撒马尔罕:第一路,由察合台、窝阔台率领,进攻讹答剌;第二路术赤(成吉思汗长子)率师攻取锡尔河畔诸城;第三军由阿剌黑率领,攻取忽毡(今土库曼斯坦阿什哈巴德)和别纳客忒(今乌兹别克斯坦塔什干南);第四路,由成吉思汗与托雷(成吉思汗四子)取中路,进攻不花剌城。花喇子模新都撒马尔罕在不花剌城以东,旧都玉龙杰赤城在不花剌城西北。摩诃末·苏丹驻扎在新都,母后秃儿罕哈墩驻旧都。成吉思汗首站任务是攻取讹答剌城等边界城市,然主攻不花剌城,切断新旧二都之间的联系,使其首尾不能相顾。
1219年9月,察合台、窝阔台的一路军开始攻打讹答剌城,征伐讹答剌城是蒙古军队和花喇子模军队的序幕之战,它的胜败对于双方的都有着具大的战略意义。
讹答剌城(位于哈萨克斯坦南哈萨克斯坦州奇姆肯特市阿雷思河和锡尔河交汇处)是花剌子模王国东方重镇。城墙和防御工事极为坚固,守军达4万人并集中储备了大量的战略物资。守将便是错杀蒙古商队的罪魁祸首亦纳勒术;副将是哈剌察,亦纳勒术心里清楚这场战争因自己而挑起,所以率领部众死守城池。
这场城池攻坚战非常惨烈,亦纳勒术抵档住了蒙古大军多次进攻,但毕竟已成瓮中之鳖在抵抗了5个月后,终于开始失去了信心、军民斗志开始涣散。副将哈尔察提出突围的意见,但是亦纳勒术清楚自己的处境成吉思汗是不会饶过自己只能决战到底,便放弃了突围的意见。
哈剌察见状决定自己率领1万骑兵突围,但是刚从苏菲哈纳门冲出便被蒙古大军活捉,蒙军乘机从苏菲哈纳门攻近城中与讹答剌城军民展开了巷战,1个月后讹答剌城被攻陷,守将亦纳勒术被活捉。
成吉思汗为了给死去的商队报仇,将融化的银水注入了他的眼睛和双耳,亦纳勒术惨死在刑场也算是死得其所吧。
第二路军,术赤率部沿锡尔河左岸进发,最先来到了昔格纳黑城(其遗址现名为苏纳克库尔干,在今哈萨克斯坦图门阿鲁克由站以北),术赤派一名叫哈散哈只的穆斯林去城中劝降,但是,城中百姓不听还将其打死。于是,术赤开始全面进攻,连续进攻七日攻陷昔格纳黑城,进城后杀死了所有居民。
而后,术赤来到毡的城。毡的城守将忽都鲁汗见蒙古军队兵临城下后却连夜弃城逃跑,经过沙漠地带,跑到玉龙杰赤去了。术赤见状仍然先采取了招降策略,毡的城居民最初还以坚守为主,但当蒙古军队成功占领城墙后却没有向蒙军进攻,由于他们没有抵抗,术赤赦免了他们,并委任了一个名叫阿里-火者的人为毡的城长官,管理城中军民。
第三路大军在阿剌黑率领下先攻下了别纳克忒城之后于1220年三月抵达了锡尔河畔的忽毡城(今塔吉克斯坦列尼纳巴德城,中亚古城之一。),忽毡城的守将是花剌子模著名的将领贴木儿灭里,他亲帅数千名精兵守护城池。忽毡城处在锡尔河中央,城堡高大、坚固,而且所处位置正好超出蒙古大军的弓箭和弩炮的射程之外。蒙军将领哈撒儿调来5万战俘从12公里外的山地运来石头填入锡尔河,企图逐步靠入城堡。贴木儿灭里造了十二艘密封的战船,船上蒙上厚厚的湿毡,外涂一层揉有醋的粘土,上面留有射箭口。这样无论蒙古军无论是用弓箭还是火攻都失去了作用,一次次进攻失利。
此时,术赤率领第三军一部及时赶到锡尔河两岸开始布置兵力,调来被俘的工匠连夜打造巨型弩炮和搭建浮桥,每个桥头以重兵把守,妄图将贴木儿灭里困死在锡尔河中。连续数月的围困也让贴木儿灭里感到了疲惫,再蒙军接下来的进攻中开始势渐不支。最后贴木儿灭里成功率领剩下的部众成功突围。
贴木儿灭里在忽毡城的英勇抵抗,是成吉思汗西征以来碰到的第一个顽强的将领,贴木儿灭里以1000多人抵挡住了多于自己数倍的蒙古大军的数次进攻,这说明花喇子模的军队中是不缺乏英雄气概的将领。
1220年三月,成吉思汗和四子拖雷所率领的第四路军从讹答剌城,经进昔格纳黑城和纳尔城,来到不花剌(今乌兹别克斯坦的布哈剌)城下。不花剌位于阿姆河东岸,位于花剌子模故都玉龙杰赤和新都撒马尔罕之间,是河中与波斯东西交通咽喉,是除撒马尔罕外最重要的城市,同是也是穆斯林世界的最大城市之一。街道四通八达,充足的水源和蜚声世界的手工艺制品给这里带来了富饶金额繁荣的景象。
成吉思汗大军赶到时,不花剌城由3万突厥人组成的雇佣军守护,最高长官是花喇子模著名将领怯失力汗。当怯失力汗拒绝投降后,蒙古军便发起了猛烈的进攻,城中的雇佣军将领乘夜率军突围逃出。蒙古军顺势攻入不花剌城,守将怯失力汗自杀殉国。但城中内堡中有骑兵400人仍然坚守不降,时常夜袭蒙古军队。成吉思汗在城堡周围架起投石器,向堡里投入巨堡石,打开缺口后,蒙古军冲入内堡,堡内军民无一幸免,全部斩杀。内堡肃清后,成吉思汗下令把城墙推到,把居民赶到城外的山坡上,然后放蒙古军队再次入城洗劫,城中青壮年被编入军队为随军进攻撒马尔罕。
Public Sub TampNotePad(ByVal sTxtFile As String, Optional ByVal bTrimRow As Variant = True) ‘对文本文件消除空行, bTrimRow 为真, 则行 ” ” 视为空行 “”
On Error Resume Next
Dim I As Integer, J As Integer
Dim Lines() As String
Dim LineContent As String
Dim iLineCount As Integer
Dim TxtFileNumber As Integer
TxtFileNumber = FreeFile
If Not FileExist(sTxtFile) Then Exit Sub
Open sTxtFile For Input As TxtFileNumber
Do While Not EOF(TxtFileNumber) ‘把文本读至数组
Line Input #TxtFileNumber, LineContent
iLineCount = iLineCount + 1
ReDim Preserve Lines(1 To iLineCount)
Lines(iLineCount) = LineContent
Loop
Close TxtFileNumber
Open sTxtFile For Output As TxtFileNumber
For I = 1 To iLineCount ‘把数组写入文本
If bTrimRow Then Lines(I) = Trim(Lines(I))
If Not Lines(I) = “” Then Print #TxtFileNumber, Lines(I)
Next I
Close TxtFileNumber
If Err.Number <> 0 Then Err.Clear
On Error GoTo 0
End Sub
Public Sub TrimNotePad(ByVal sTxtFile As String, Optional ByVal bTrimRow As Variant = True) ‘对文本文件消除前后空行, 中间空行不管, bTrimRow 为真, 则行 ” ” 视为空行 “”
On Error Resume Next
Dim I As Integer, J As Integer
Dim Lines() As String
Dim LineContent As String
Dim iLineCount As Integer
Dim TxtFileNumber As Integer
TxtFileNumber = FreeFile
If Not FileExist(sTxtFile) Then Exit Sub
Open sTxtFile For Input As TxtFileNumber
Do While Not EOF(TxtFileNumber) ‘把文本读至数组
Line Input #TxtFileNumber, LineContent
iLineCount = iLineCount + 1
ReDim Preserve Lines(1 To iLineCount)
Lines(iLineCount) = LineContent
Loop
Close TxtFileNumber
Dim iBegin As Integer, iEnd As Integer
For I = 1 To iLineCount
If bTrimRow Then Lines(I) = Trim(Lines(I))
If Not Lines(I) = “” Then
iBegin = I
Exit For
End If
Next I
For I = iLineCount To 1 Step -1
If bTrimRow Then Lines(I) = Trim(Lines(I))
If Not Lines(I) = “” Then
iEnd = I
Exit For
End If
Next I
Open sTxtFile For Output As TxtFileNumber
For I = iBegin To iEnd ‘把数组写入文本
Print #TxtFileNumber, Lines(I)
Next I
Close TxtFileNumber
If Err.Number <> 0 Then Err.Clear
On Error GoTo 0
End Sub
Public Sub CleanNotePad(ByVal sTxtFile As String) ‘对文本文件消除重复行
On Error Resume Next
Dim I As Integer, J As Integer
Dim Lines() As String
Dim LineContent As String
Dim iLineCount As Integer
Dim TxtFileNumber As Integer
TxtFileNumber = FreeFile
If Not FileExist(sTxtFile) Then Exit Sub
Open sTxtFile For Input As TxtFileNumber
Do While Not EOF(TxtFileNumber) ‘把文本读至数组
Line Input #TxtFileNumber, LineContent
iLineCount = iLineCount + 1
ReDim Preserve Lines(1 To iLineCount)
Lines(iLineCount) = LineContent
Loop
Close TxtFileNumber
Call CleanUpArray(Lines) ‘去除重复元素
iLineCount = UBound(Lines) – LBound(Lines) + 1
Open sTxtFile For Output As TxtFileNumber
For I = 1 To iLineCount
Print #TxtFileNumber, Lines(I)
Next I
Close TxtFileNumber
If Err.Number <> 0 Then Err.Clear
On Error GoTo 0
End Sub
Public Sub SortNotePad(ByVal sTxtFile As String, ByVal bAscending As Boolean) ‘对文本文件按行排序
On Error Resume Next
Dim I As Integer, J As Integer
Dim Lines() As String
Dim LineContent As String
Dim iLineCount As Integer
Dim TxtFileNumber As Integer
TxtFileNumber = FreeFile
If Not FileExist(sTxtFile) Then Exit Sub
Open sTxtFile For Input As TxtFileNumber
Do While Not EOF(TxtFileNumber) ‘把文本读至数组
Line Input #TxtFileNumber, LineContent
iLineCount = iLineCount + 1
ReDim Preserve Lines(1 To iLineCount)
Lines(iLineCount) = LineContent
Loop
Close TxtFileNumber
If iLineCount = 0 Then Exit Sub ‘LBound 会出错
Dim iBest As Integer
Dim sBest As String
For I = 1 To iLineCount – 1 ‘对数组进行有序处理
iBest = I
sBest = Lines(I)
For J = I + 1 To iLineCount
If StrComp(Lines(J), sBest, vbTextCompare) < 0 Then sBest = Lines(J) iBest = J End If Next J Lines(iBest) = Lines(I) Lines(I) = sBest Next I Open sTxtFile For Output As TxtFileNumber If bAscending = True Then ‘把数组写入文本 ‘Ascending order For I = 1 To iLineCount Print #TxtFileNumber, Lines(I) Next I Else ‘Descending order For I = iLineCount To 1 Step -1 Print #TxtFileNumber, Lines(I) Next I End If Close TxtFileNumber If Err.Number <> 0 Then Err.Clear
On Error GoTo 0
End Sub
Public Sub ClearNotePad(ByVal sTxtFile As String) ‘保留文本文件但清空其内容
On Error Resume Next
Dim I As Integer, J As Integer
Dim Lines() As String
Dim TxtFileNumber As Integer
TxtFileNumber = FreeFile
Open sTxtFile For Output As TxtFileNumber
For I = LBound(Lines) To UBound(Lines) ‘把数组写入文本
Print #TxtFileNumber, Lines(I)
Next I
Close TxtFileNumber
If Err.Number <> 0 Then Err.Clear
On Error GoTo 0
End Sub
Public Function FindNotePadText(ByVal sTxtFile As String, ByVal sData As String) As Boolean
FindNotePadText = False
On Error Resume Next
Dim TxtFileNumber As Integer
Dim LineContent As String
TxtFileNumber = FreeFile
If Not FileExist(sTxtFile) Then Exit Function
Open sTxtFile For Input As TxtFileNumber
Do While Not EOF(TxtFileNumber) ‘把文本读至数组
Line Input #TxtFileNumber, LineContent
If InStr(1, LineContent, sData, vbTextCompare) > 0 Then
FindNotePadText = True
Exit Do
End If
Loop
Close TxtFileNumber
If Err.Number <> 0 Then Err.Clear
On Error GoTo 0
End Function
Public Function GetNotePadRowNo(ByVal sTxtFile As String, ByVal sData As String, Optional ByVal bFirst As Boolean = False) As Integer
‘sData 出现在 sTxtFile 的行号,无 sData 为 0,bFirst = True 取第一次,bFirst = False 取最后一次
On Error Resume Next
GetNotePadRowNo = 0
If Not FileExist(sTxtFile) Then Exit Function
Dim TxtFileNumber As Integer
Dim LineContent As String
Dim LineArray() As Integer
Dim LineCount As Integer
Dim LineNumber As Integer
LineCount = 0
LineNumber = 0
TxtFileNumber = FreeFile
Open sTxtFile For Input As TxtFileNumber
Do While Not EOF(TxtFileNumber) ‘读文本
Line Input #TxtFileNumber, LineContent
LineNumber = LineNumber + 1
If InStr(1, LineContent, sData, vbTextCompare) > 0 Then ‘出现
LineCount = LineCount + 1
ReDim Preserve LineArray(1 To LineCount)
LineArray(LineCount) = LineNumber
End If
Loop
Close TxtFileNumber
If IsEmptyArray(LineArray) Then Exit Function ‘0
If bFirst Then
GetNotePadRowNo = LineArray(LBound(LineArray))
Else
GetNotePadRowNo = LineArray(UBound(LineArray))
End If
If Err.Number <> 0 Then Err.Clear
On Error GoTo 0
End Function
Public Sub ReplaceNotePadText(ByVal sTxtFile As String, ByVal sOld As String, ByVal sNew As String)
On Error Resume Next
Dim I As Integer, J As Integer
Dim Lines() As String
Dim LineContent As String
Dim iLineCount As Integer
Dim TxtFileNumber As Integer
TxtFileNumber = FreeFile
If Not FileExist(sTxtFile) Then Exit Sub
Open sTxtFile For Input As TxtFileNumber
Do While Not EOF(TxtFileNumber) ‘把文本读至数组
Line Input #TxtFileNumber, LineContent
LineContent = Replace(LineContent, sOld, sNew, 1, -1, vbTextCompare)
iLineCount = iLineCount + 1
ReDim Preserve Lines(1 To iLineCount)
Lines(iLineCount) = LineContent
Loop
Close TxtFileNumber
If iLineCount = 0 Then Exit Sub ‘LBound 会出错
Open sTxtFile For Output As TxtFileNumber
For I = 1 To iLineCount
Print #TxtFileNumber, Lines(I)
Next I
Close TxtFileNumber
If Err.Number <> 0 Then Err.Clear
On Error GoTo 0
End Sub
Public Sub TurnNotePadCursor(ByVal sTxtFile As String, ByVal iRow As Integer, Optional ByVal iColumn As Integer = 1, Optional bOpen As Boolean = False) ‘把文本文件光标移到某行某列
On Error Resume Next
Dim I As Integer, J As Integer
Dim oShell As Object
Set oShell = CreateObject(“WScript.Shell”)
If bOpen Then
‘新打开文件
Dim lPid As Long
lPid = Shell(“notepad.exe ” & sTxtFile, vbNormalFocus)
AppActivate (lPid)
Else
‘须紧跟 OpenFile 之后,以保证 sTxtFile 为当前窗体
‘Debug.Print sTxtFile
‘Debug.Print GetShortName(sTxtFile)
For I = 1 To GetNotePadRowCount(sTxtFile, False)
DoEvents
oShell.SendKeys “{UP}” ‘回到首行
Next I
For J = 1 To GetNotePadColumnCount(sTxtFile, False)
DoEvents
oShell.SendKeys “{LEFT}” ‘回到首列
Next J
End If
For I = 1 To iRow – 1
oShell.SendKeys “{DOWN}”
Next I
For J = 1 To iColumn – 1
oShell.SendKeys “{RIGHT}”
Next J
ERR_NORUNNING:
If Err.Number <> 0 Then Err.Clear
On Error GoTo 0
End Sub
Public Function GetNotePadRowCount(ByVal sTxtFile As String, Optional ByVal bTrimRow As Variant = True) As Integer ‘获取 txt 文件行数, bTrimRow 为真, 则空行 “” 及空格行 ” ” 不计
On Error Resume Next
GetNotePadRowCount = 0
Dim TxtFileNumber As String
TxtFileNumber = FreeFile
If bTrimRow Then
Dim LineContent As String
Open sTxtFile For Input As TxtFileNumber
Do While Not EOF(TxtFileNumber) ‘把文本读至数组
Line Input #TxtFileNumber, LineContent
LineContent = Trim(LineContent)
If Not LineContent = “” Then GetNotePadRowCount = GetNotePadRowCount + 1
Loop
Close TxtFileNumber
Else
Open sTxtFile For Binary As #TxtFileNumber
GetNotePadRowCount = UBound(Split(Input(LOF(1), #1), vbCrLf)) + 1
Close #TxtFileNumber
End If
If Err.Number <> 0 Then Err.Clear
On Error GoTo 0
End Function
Public Function GetNotePadColumnCount(ByVal sTxtFile As String, Optional ByVal bTrimRow As Variant = True) As Integer ‘获取 txt 文件列数(最大列数)), bTrimRow 为真, 则每行两端的 ” ” 不计
On Error Resume Next
Dim I As Integer, J As Integer
GetNotePadColumnCount = 0
Dim LineContent As String
Dim TxtFileNumber As Integer
TxtFileNumber = FreeFile
If Not FileExist(sTxtFile) Then Exit Function
Open sTxtFile For Input As TxtFileNumber
Do While Not EOF(TxtFileNumber)
Line Input #TxtFileNumber, LineContent
If bTrimRow Then LineContent = Trim(LineContent)
If Len(LineContent) > GetNotePadColumnCount Then GetNotePadColumnCount = Len(LineContent)
Loop
Close TxtFileNumber
If Err.Number <> 0 Then Err.Clear
On Error GoTo 0
End Function
Public Function GetNotePadColumnCountAtRow(ByVal sTxtFile As String, ByVal iRow As Integer, Optional ByVal bTrimRow As Variant = True) As Integer ‘获取 txt 文件某行列数, bTrimRow 为真, 则行两端的 ” ” 不计
On Error Resume Next
Dim I As Integer, J As Integer
GetNotePadColumnCountAtRow = 0
Dim LineContent As String
Dim TxtFileNumber As Integer
Dim iCount As Integer
TxtFileNumber = FreeFile
If Not FileExist(sTxtFile) Then Exit Function
Open sTxtFile For Input As TxtFileNumber
Do While Not EOF(TxtFileNumber)
Line Input #TxtFileNumber, LineContent
iCount = iCount + 1
If bTrimRow Then LineContent = Trim(LineContent)
If iCount = iRow Then
GetNotePadColumnCountAtRow = Len(LineContent)
Exit Do
End If
Loop
Close TxtFileNumber
If Err.Number <> 0 Then Err.Clear
On Error GoTo 0
End Function
Public Function GetNotePadRowText(ByVal sTxtFile As String, ByVal iLineNumber As Integer) As String ‘获取 txt 文件某行内容
On Error Resume Next
Dim I As Integer, J As Integer
GetNotePadRowText = “”
If iLineNumber > GetNotePadRowCount(sTxtFile, False) Then Exit Function
Dim oFSO As Object, oFile As Object, oStream As Object
Set oFSO = CreateObject(“Scripting.FileSystemObject”)
Set oFile = oFSO.GetFile(sTxtFile)
Set oStream = oFile.OpenAsTextStream(1, 0)
‘ 读取指定行
For I = 1 To iLineNumber
GetNotePadRowText = oStream.ReadLine
Next
oStream.Close
Set oStream = Nothing
Set oFile = Nothing
Set oFSO = Nothing
If Err.Number <> 0 Then Err.Clear
On Error GoTo 0
End Function