instr函數(shù)在Oracle/PLSQL中是返回要截取的字符串在源字符串中的位置。instr是一個(gè)非常好用的字符串處理函數(shù),幾乎所有的字符串分隔都用到此函數(shù)。
鳩江網(wǎng)站建設(shè)公司成都創(chuàng)新互聯(lián)公司,鳩江網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為鳩江上千余家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)網(wǎng)站制作要多少錢,請(qǐng)找那個(gè)售后服務(wù)好的鳩江做網(wǎng)站的公司定做!
語法如下:
instr(
string1,
string2,
start_position,nth_appearance
)
示例:
SELECT
instr('syranmo','s')
FROM
dual;
--
返回
1
SELECT
instr('syranmo','ra')
FROM
dual;
--
返回
3
SELECT
instr('syran
mo','a',1,2)
FROM
dual;
--
返回
不知道你的winsock?是udp還是tcpip協(xié)議
這里給你一個(gè)我寫的實(shí)例?我是用的udp?這個(gè)發(fā)送了一段數(shù)據(jù)不一定接收就正確?所以我做了校驗(yàn)
'以下是發(fā)送文件的
Option?Explicit
Dim?GetFileNum?As?Integer,?LenFile?As?Long,?SendByte()?As?Byte?'發(fā)送的包
Private?Sub?Command1_Click()
On?Error?Resume?Next
Command1.Enabled?=?False
GetFileNum?=?FreeFile?'取得未使用的文件號(hào)
LenFile?=?FileLen(Text1.Text)?'獲得需傳送的文件的長(zhǎng)度
If?Text2.Text?=?""?Or?Right(Left(Text2.Text,?2),?1)??":"?Then?Text2.Text?=?Text1.Text
Winsock0.SendData?"#SEND?STA#"??LenFile??"http://"??Text2.Text
Wt?0.5
Open?Text1.Text?For?Binary?As?#GetFileNum?'打開需傳送的文件
Call?TCPSendFile(Winsock0,?GetFileNum,?SplitFile)?'傳送文件
Me.Caption?=?Now
Ti.Enabled?=?True
End?Sub
Private?Sub?Command2_Click()
Unload?Me
End?Sub
Private?Sub?Form_Load()
Dim?A?As?String
On?Error?Resume?Next
Command2.Top?=?-2000
Winsock0.RemoteHost?=?IPX?'服務(wù)器ip
Winsock0.RemotePort?=?FilePort
End?Sub
Private?Function?SplitFile()?As?Long?'拆包'為了清晰,下面分別用兩個(gè)子過程來完成計(jì)算這次還可以傳多少個(gè)字節(jié)的數(shù)據(jù)和傳送數(shù)據(jù)
On?Error?Resume?Next
Dim?GetCount?As?Long
If?LenFile?=?4000?Then?'計(jì)算出這次可發(fā)送的字節(jié)數(shù)
GetCount?=?4000
LenFile?=?LenFile?-?GetCount
Else
GetCount?=?LenFile
LenFile?=?LenFile?-?GetCount
End?If
SplitFile?=?GetCount
End?Function
Private?Sub?TCPSendFile(objWinSock?As?Winsock,?FileNumber?As?Integer,?SendLen?As?Long)
On?Error?Resume?Next
Dim?FileByte()?As?Byte,?I?As?Long,?j?As?Long,?Temp?As?String?*?4
ReDim?SendByte(0)
ReDim?FileByte(SendLen?-?1)
Temp?=?SendLen?+?7
SendByte?=?Temp?'把長(zhǎng)度負(fù)值給包頭
Get?#FileNumber,?,?FileByte?'讀取文件
ReDim?Preserve?SendByte(SendLen?+?7)?'把包頭+到文件頭
For?I?=?0?To?UBound(FileByte)
SendByte(I?+?7)?=?FileByte(I)
'DoEvents
Next
Winsock0.SendData?SendByte
End?Sub
Private?Sub?Form_Unload(Cancel?As?Integer)
On?Error?Resume?Next
Winsock0.Close
Err.Clear
End?Sub
Private?Sub?TEnd_Timer()
On?Error?Resume?Next
Winsock0.SendData?"#END#"
Err.Clear
End?Sub
Private?Sub?Ti_Timer()
On?Error?Resume?Next
Winsock0.SendData?"#ERR#"
End?Sub
Private?Sub?Winsock0_DataArrival(ByVal?bytesTotal?As?Long)
On?Error?Resume?Next
Dim?S?As?String
Winsock0.GetData?S
Select?Case?S
Case?"ok"?'成功繼續(xù)發(fā)送
If?LenFile?=?0?Then?'發(fā)送完成
? If?S??"#SEND?END#"?Then?Winsock0.SendData?"#SEND?END#"
? Me.Caption?=?"文件上傳成功!"
? Command1.Enabled?=?True
? Ti.Enabled?=?False
? TEnd.Enabled?=?True
? Exit?Sub
Else
? Me.Caption?=?"文件上傳完成:["??Left((FileLen(Text1.Text)?-?LenFile)?/?FileLen(Text1.Text)?*?100,?4)??"%]"
End?If
Call?TCPSendFile(Winsock0,?GetFileNum,?SplitFile)
Case?"#END#"
TEnd.Enabled?=?False
FMain.TiF.Enabled?=?True
Case?"no"?'不成功重發(fā)上一個(gè)包
Winsock0.SendData?SendByte
End?Select
End?Sub
'以下是接收文件的
Option?Explicit
Dim?FOK?As?Boolean,?Fs?As?Long,?FileNumber?As?Integer,?LenFile?As?Long? '文件的長(zhǎng)度
Private?Sub?Command1_Click()
Unload?Me
End?Sub
Private?Sub?Command2_Click()
On?Error?Resume?Next
Dim?A?As?String
Me.Caption?=?"開始下載"
If?Dir(Text2.Text)??""?And?ChV.Value?=?0?Then
If?MsgBox("文件已經(jīng)存在,覆蓋嗎?",?vbCritical?+?vbYesNo)?=?vbYes?Then?Kill?Text2.Text?Else?Exit?Sub
Else
Kill?Text2.Text
End?If
If?Text2.Text?=?""?Then?Text2.Text?=?Text1.Text
'Command2.Enabled?=?False
If?Ch.Value?=?0?Then?A?=?"#DOW#"?Else?A?=?"#DOV#"
FMain.Wsk.SendData?A??Text1.Text
Wt?1
FMain.Wsk.SendData?"#DOE#"??Text2.Text
End?Sub
Private?Sub?Form_Load()
Dim?A?As?String
'FMain.Ts.Enabled?=?True
On?Error?Resume?Next
If?FMain.Cb.Text?=?"本地組"?Or?FMain.Cb.Text?=?"全部組"?Then
Me.Caption?=?"請(qǐng)重選下載用戶[“組”不能正確下載]"
Else
Command1.Top?=?-2000
Winsock0.LocalPort?=?FilePort
Winsock0.Bind
End?If
End?Sub
Private?Sub?Form_Unload(Cancel?As?Integer)
On?Error?Resume?Next
Winsock0.Close
Err.Clear
End?Sub
Private?Sub?La_Click()
CDL.FileName?=?""
CDL.ShowOpen
Text2.Text?=?CDL.FileName
End?Sub
Private?Sub?Winsock0_DataArrival(ByVal?bytesTotal?As?Long)
On?Error?Resume?Next
Dim?FileByte()?As?Byte,?A?As?String,?MendByte()?As?Byte,?I?As?Long,?J?As?Long,?Temp?As?String,?W?As?String
Winsock0.GetData?FileByte,?vbArray?+?vbByte?'接收類型為:字節(jié)數(shù)組
J?=?UBound(FileByte)?'獲得包長(zhǎng)
For?I?=?0?To?7?Step?2?'合并包頭
Temp?=?Temp??Chr(FileByte(I))
Next
For?I?=?0?To?9?'文件發(fā)送結(jié)束標(biāo)記
A?=?A??Chr(FileByte(I))
Next
If?A?=?"#ERR#"?Then?Winsock0.SendData?"no"
If?A?=?"#END#"?Then
For?I?=?0?To?Len(FMain.TIn.Text)
? If?I??100?Then
? ? ? W?=?Left(Right(FMain.TIn.Text,?I),?1)
? ? ? If?W?=?"!"?Then
? ? ? ? ? W?=?Left(Right(FMain.TIn.Text,?I?+?4),?5)
? ? ? ? ? Exit?For
? ? ? End?If
? Else
? ? ? Exit?For
? End?If
Next?I
If?W??"下載完成!"?Then
? FOK?=?False
? Me.Caption?=?"下載完成!["??Text2.Text??"]"
? FMain.TIn.Text?=?FMain.TIn.Text??"["??Now??"]"??"下載完成!("??Fs??"="??LenFile??")"??vbCrLf
? Command2.Enabled?=?True
End?If
Else
If?Val(Temp)?=?J?Then?'比較長(zhǎng)度看丟包沒有
? ReDim?MendByte(J?-?8)
? For?I?=?0?To?J?-?8?'提出包頭
? ? ? MendByte(I)?=?FileByte(I?+?7)
? Next
? Fs?=?Fs?+?UBound(FileByte)?-?7
? Put?#FileNumber,?,?MendByte?'寫文件
? Winsock0.SendData?"ok"?'發(fā)送繼續(xù)發(fā)送的請(qǐng)求
? Me.Caption?=?"文件下載完成:["??Left(Fs?/?LenFile?*?100,?4)??"%]"
Else
? If?Left(A,?10)?=?"#SEND?STA#"?Then
? ? ? A?=?""
? ? ? For?I?=?10?To?UBound(FileByte)?'文件發(fā)送結(jié)束標(biāo)記
? ? ? ? ? A?=?A??Chr(FileByte(I))
? ? ? Next
? ? ? LenFile?=?Val(Left(A,?InStr(A,?"http://")?-?1))
? ? ? For?I?=?0?To?Len(Text2.Text)
? ? ? ? ? A?=?Left(Right(Text2.Text,?I),?1)
? ? ? ? ? If?A?=?"\"?Then?Exit?For
? ? ? Next
? ? ? If?Dir(Left(Text2.Text,?Len(Text2.Text)?-?I?+?1),?vbDirectory)?=?""?Then?MkDir?Left(Text2.Text,?Len(Text2.Text)?-?I?+?1)
? ? ? '"#SEND?STA#"??FileLen(Text1.Text)??"http://"??Text2.Text
? ? ? FileNumber?=?FreeFile?'取得未使用的文件號(hào)
? ? ? Fs?=?0
? ? ? Open?Text2.Text?For?Binary?As?#FileNumber?'打開文件
? Else
? ? ? If?A??"#SEND?END#"?Then
? ? ? ? ? Winsock0.SendData?"no"?'出現(xiàn)丟包,請(qǐng)求重發(fā)
? ? ? Else
? ? ? ? ? Winsock0.SendData?"#END#"?'發(fā)送繼續(xù)發(fā)送的請(qǐng)求
? ? ? ? ? Close?#FileNumber
? ? ? ? ? Reset
? ? ? ? ? If?FOK?=?False?Then
? ? ? ? ? ? ? FOK?=?True
? ? ? ? ? ? ? Me.Caption?=?"下載完成!["??Text2.Text??"]"
? ? ? ? ? ? ? FMain.TIn.Text?=?FMain.TIn.Text??"["??Now??"]"??"下載完成!("??Fs??"="??LenFile??")"??vbCrLf
? ? ? ? ? ? ? Command2.Enabled?=?True
? ? ? ? ? Else
? ? ? ? ? ? ? FOK?=?False
? ? ? ? ? End?If
? ? ? End?If
? End?If
End?If
End?If
End?Sub
語句InStr(2,"abcabc","ab")的功能就是,從字符串"abcabc"左起第2個(gè)字符開始,查找字符串
"ab",如果找到就返回匹配的左起的字符位置。
現(xiàn)在從字符串"abcabc"左起第2個(gè)字符開始,查找字符串"ab",找到的是第4位與第5位構(gòu)成的“ab”,所以返回的是4。
這里的4是指,匹配的字符串在原來字符串里左面數(shù)起的位置。
例如:
Instr(2,"中國江蘇南京","江蘇") 返回3
Instr(1,"中國江蘇南京","江蘇") 返回3
Instr(2,"中國江蘇南京","南京") 返回5
Instr(1,"中國江蘇南京","蘇南") 返回4
C#查找字串中指定字符或字串首次出現(xiàn)的位置用IndexOf()。
IndexOf()查找字串中指定字符或字串首次出現(xiàn)的位置,返首索引值,如:
str1.IndexOf("字") //查找“字”在str1中的索引值(位置)
str1.IndexOf("字串") //查找“字串”的第一個(gè)字符在str1中的索引值位置
str1.IndexOf("字",start,end)//從str1第start+1個(gè)字符起,查找end個(gè)字符,查找“字”在字符串STR1中的位置[從第一個(gè)字符算起]
注意:start+end不能大于str1的長(zhǎng)度 indexof參數(shù)為string,在字符串中尋找參數(shù)字符串第一次出現(xiàn)的位置并返回該位置。