资源描述
点击“读取”按钮执行以下代码:
Dim FileName As String
Dim s1 As String
Text1.Text = ""
FileName = App.Path + "\" + "1.txt" '----假设文本文件的名为1.txt
Open FileName For Input As #1
Do While Not EOF(1)
Line Input #1, s1
Text1.Text = Text1.Text + s1 + Chr(13) + Chr(10)
Loop
Close #1
vb读取文本文件一行中的固定位置的变量
例如下面一行中
0507 99 16 98 16 98 160507 (94 11) 97 230503
各个数字都是变量(每分钟一变)我想从中读取括号内两个变量(括号并不存在)这两个变量在这行中的位置是固定的,请问如何实现
希望各位高手不吝赐教vb详细代码
Dim s$, ss() As String
s = "0507 99 16 98 16 98 160507 94 11 97 230503"
ss = split(s)
msgbox ss(7) & "," & ss(8) '显示“94,11”
Dim s$, s1$, k&, ss() As String, i&
s = "0104 69 90 12 16 98 160 57 94 11 97 30503 12123 6767 778 999"
k = 37
s1 = Right$(s, Len(s) - k + 1)
ss = Split(s1, " "): s = ""
For i = 0 To 3
s = s & ss(i) & vbCrLf
Next
MsgBox s '四个数
读取zz.txt的代码:
Private Type zdz_zz '218字节,----、////表示缺测或无记录
s1 As String * 4 '北京时间,如0800
s2 As String * 4 '2分钟风向
s3 As String * 4 '2分钟平均风速
s4 As String * 4 '10分钟平均风向
s5 As String * 4 '10分钟平均风速
s6 As String * 4 '最大风速时风向
s7 As String * 4 '最大风速
s8 As String * 4 '最大风速时间
s9 As String * 4 '瞬时风向
s10 As String * 4 '瞬时风速
s11 As String * 4 '极大风向
s12 As String * 4 '极大风速
s13 As String * 4 '极大风速时间
s14 As String * 4 '雨量
s15 As String * 4 '干球温度
s16 As String * 4 '最高气温
s17 As String * 4 '最高气温出现时间
s18 As String * 4 '最低气温
s19 As String * 4 '最低气温出现时间
s20 As String * 4 '湿球温度 , ****为冬季湿球停用
s21 As String * 4 '湿敏电容湿度值
s22 As String * 4 '相对湿度
s23 As String * 4 '最小相对湿度
s24 As String * 4 '最小相对湿度出现时间
s25 As String * 4 '水汽压
s26 As String * 4 '露点温度
s27 As String * 4 '本站气压,如 0235,9999
s28 As String * 4 '最高本站气压
s29 As String * 4 '最高本站气压出现时间
s30 As String * 4 '最低本站气压
s31 As String * 4 '最低本站气压出现时间
s32 As String * 4 '草面(雪面)温度
s33 As String * 4 '草面(雪面)最高温度
s34 As String * 4 '草面(雪面)最高时间
s35 As String * 4 '草面(雪面)最低温度
s36 As String * 4 '草面(雪面)最低时间
s37 As String * 4 '地面温度
s38 As String * 4 '地面最高温度
s39 As String * 4 '地面最高出现时间
s40 As String * 4 '地面最低温度
s41 As String * 4 '地面最低出现时间
s42 As String * 4 '5厘米地温
s43 As String * 4 '10厘米地温
s44 As String * 4 '15厘米地温
s45 As String * 4 '20厘米地温
s46 As String * 4 '40厘米地温
s47 As String * 4 '80厘米地温
s48 As String * 4 '160厘米地温
s49 As String * 4 '320厘米地温
s50 As String * 4 '蒸发量
s51 As String * 4 '日照
s52 As String * 5 '能见度
s53 As String * 5 '最小能见度
s54 As String * 4 '最小能见度出现时间
End Type
Private Sub Command1_Click()
Dim d As zdz_zz, f1%, zz$, ss$
zz = "d:\zdz\zz.txt"
f1 = FreeFile: Open zz For Random As #f1 Len = Len(d): Get #f1, 1, d: Close #f1
ss = ""
ss = ss & "当前气温=" & Val(d.s15) / 10 & vbCrLf
ss = ss & "相对湿度=" & Val(d.s22) & vbCrLf
ss = ss & "地面温度=" & Val(d.s37) / 10
MsgBox ss
End Sub
使用matlab进行数据批处理!
鉴于多数人对于高级语言不是很熟练,这里我使用matlab为例进行数据的批处理工作。
考虑一个文件件内有n个同一属性的数据文件,每个文件代表不同的年份,怎么对于这些文件进行统计整理?
下面是代码:
输入,比如在某文件夹内有n个txt或是dat等格式的文件,现在要一次性读入matlab:
%method 1:
cd f:\xxx %xxx即是文件所在文件夹。
dat=struct2cell(dir);
for i=1:length(dat)-2
data{i}=importdata(dat{1,i+2}); %使用元胞数组存储各文件中的内容。
end
%method 2:
dat1=dir('f:\data');
for i=1:length(dat1)-2
data1{i}=importdata(dat1(i+2).name);
end
多文件的输出:
考虑这个问题,我们必须先生成一个可以产生连续整数序列的函数生成注入001、002、003、……、999
类似整数。
我写了一个,作为参考:
function b=fullnum(n)
if n~=floor(n)||n<=0||n>9999
fprintf('Error:The number is not allowed float-point,less than 0 or larger than 9999!\n');
return;
end
b={};
for i=1:n
if i<10^floor(log10(n))
b{i}=strcat(char(ones(1,floor(log10(n))-floor(log10(i)))*48),int2str(i));
else
b{i}=int2str(i);
end
end
end
下面使用类似这个的模板,存储一个元胞数组的内容到一系列连续文件名的文件:
mkdir F:\data
name=fullnum(41);
for i=1:41
a=data{i};
save(strcat('F:\data\data',name{i},'.txt'),'a','-ascii');
end
你要将A文件中的天气现象代码与同一天的时间等区分开来,其次不知你注意没有,我们青海省milos500自动站就带有天气现象字体,分别是ACW.FON,以及系统盘windows的fonts文件夹下的EUDC.EUF,EUDC.TTE三个文件,有了他们,天气现象代码可以判断对应还原,用if语句,或者select都可以,如:
dim tqdm as string'天气代码
dim tqxx as string'天气现象符号
if tqdm="17" then
tqxx= Chr(63678)
end if
具体你可以试一下我在气象软件板块做的适合于青海省的A文件要素提取工具。以下是我在A文件要素提取工具中使用的一个函数,不过是天气现象转换为代码,函数如下:
Private Function txz(tx) As String '天气现象转换为对应的数字
If tx = Chr(63663) Then '为露
txz = "01"
End If
If tx = Chr(63664) Then '为霜
txz = "02"
End If
If tx = Chr(63671) Then '为结冰
txz = "03"
End If
If tx = Chr(63675) Then '为烟幕
txz = "04"
End If
If tx = Chr(63676) Then '为霾
txz = "05"
End If
If tx = Chr(63674) Then '为浮尘
txz = "06"
End If
If tx = Chr(63673) Then '为扬沙
txz = "07"
End If
If tx = Chr(63677) Then '为尘卷风
txz = "08"
End If
If tx = Chr(63662) Then '为轻雾
txz = "10"
End If
If tx = Chr(63679) Then '为闪电
txz = "13"
End If
If tx = Chr(63680) Then '为极光
txz = "14"
End If
If tx = Chr(63681) Then '为大风
txz = "15"
End If
If tx = Chr(63670) Then '为积雪
txz = "16"
End If
If tx = Chr(63678) Then '为雷暴
txz = "17"
End If
If tx = Chr(63682) Then '为飑
txz = "18"
End If
If tx = Chr(63669) Then '为龙卷
txz = "19"
End If
If tx = Chr(63672) Then '为沙尘暴
txz = "31"
End If
If tx = Chr(63667) Then '为吹雪
txz = "38"
End If
If tx = Chr(63668) Then '为雪暴
txz = "39"
End If
If tx = Chr(63661) Then '为雾
txz = "42"
End If
If tx = Chr(63666) Then '为雾凇
txz = "48"
End If
If tx = Chr(63651) Then '为毛毛雨
txz = "50"
End If
If tx = Chr(63665) Then '为雨凇
txz = "56"
End If
If tx = Chr(63649) Then '为雨
txz = "60"
End If
If tx = Chr(63657) Then '为雨夹雪
txz = "68"
End If
If tx = Chr(63652) Then '为雪
txz = "70"
End If
If tx = Chr(63660) Then '为冰针
txz = "76"
End If
If tx = Chr(63655) Then '为米雪
txz = "77"
End If
If tx = Chr(63683) Then '为冰粒
txz = "79"
End If
If tx = Chr(63650) Then '为阵雨
txz = "80"
End If
If tx = Chr(63658) Then '为阵性雨夹雪
txz = "83"
End If
If tx = Chr(63653) Then '为阵雪
txz = "85"
End If
If tx = Chr(63654) Then '为霰
txz = "87"
End If
If tx = Chr(63659) Then '为冰雹
txz = "89"
End If
End Function
对A文件部分气象要素的提取
为弄清楚与气象因子相关的逐步回归方程,写了下面一段程序,用来提取A文件中部分要素值,刚学的编程,写得很杂乱,但还好,可以通过测试。
'从每月A文件中分别读取气压、温度、湿度、风向、风速、降水、能见度、总云量、低云量、地温、日照,分别存入相应二唯数组(I表示日期,J表示小时),并写入文件中,提取的A文件格式为基准站格式。
Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
Dim textfile As String
OpenFileDialog2.ShowDialog()
textfile = OpenFileDialog2.FileName
Dim aYear1, aMonth1, aYear, aMonth As String
aYear = textfile.Substring(16, 4)
aMonth = textfile.Substring(20, 2)
ListBox1.Items.Add(textfile)
Dim sr As IO.StreamReader = IO.File.OpenText(textfile)
Dim qiya As String
Dim a As Integer = 500
Dim c As Integer
c = bc(aYear, aMonth)
Dim row, s, one(100), two(), wendu(a, 24), yali(a, 24), shidu(a, 24), fengxiang(a, 24), fengsu(a, 24), jiangshui(a, 24), _
wendu1(a, 24), yali1(a, 24), shidu1(a, 24), fengxiang1(a, 24), fengsu1(a, 24), jiangshui1(a, 24), _
Na(a, 24), Na1(a, 24), Nb(a, 24), Nb1(a, 24), Va(a, 24), Va1(a, 24), Da(a, 24), Da1(a, 24), Sa(a, 24) As String
Dim i, j, p, numlines, upperbound As Integer
p = 0
Do While (sr.Peek <> -1)
row = sr.ReadLine
numlines += 1
Loop
'行数数组下标变量值
upperbound = numlines - 1
sr.Close()
sr = IO.File.OpenText(textfile)
For i = 0 To upperbound
row = sr.ReadLine
If row = "PC" Then '从A文件中提取气压要素并存入数组 yali(a, j)中
a = 1
row = sr.ReadLine
Do
If row.Length >= 59 Then
one = row.Split(" ")
If a = 1 Then
For j = 0 To 3
yali1(c, j + 21) = one(j)
Next
End If
For j = 4 To 11
yali(a, j - 3) = one(j)
Next
row = sr.ReadLine
two = row.Split(" ")
p = row.Length
If row.Substring((p - 1), 1) <> "=" Then
For j = 0 To 11
yali(a, j + 9) = two(j)
Next
row = sr.ReadLine
two = row.Split(" ")
For j = 0 To 3
yali(a, j + 21) = two(j)
Next
a = a + 1
Else
For j = 0 To 11
yali(a, j + 9) = two(j)
Next
a = a + 1
Exit Do
End If
End If
Loop Until row.Length < 59
End If
If row = "TB" Then '从A文件中提取温度要素并存入数组 wendu(a, j)中
a = 1
row = sr.ReadLine
Do
If row.Length >= 59 Then
s = row.Substring(0, 59)
one = row.Split(" ")
If a = 1 Then
For j = 0 To 3
wendu1(c, j + 21) = one(j)
Next
End If
For j = 4 To 11
wendu(a, j - 3) = one(j)
Next
row = sr.ReadLine
s = row.Substring(0, 59)
two = s.Split(" ")
p = row.Length
If row.Substring((p - 1), 1) <> "=" Then
For j = 0 To 11
wendu(a, j + 9) = two(j)
Next
row = sr.ReadLine
s = row.Substring(0, 59)
two = s.Split(" ")
For j = 0 To 3
wendu(a, j + 21) = two(j)
Next
a = a + 1
Else
For j = 0 To 11
wendu(a, j + 9) = two(j)
Next
a = a + 1
Exit Do
End If
End If
Loop Until row.Length < 59
End If
If row = "UB" Then '从A文件中提取湿度要素并存入数组 shidu(a, j)中
a = 1
row = sr.ReadLine
Do
If row.Length >= 35 Then
one = row.Split(" ")
If a = 1 Then
For j = 0 To 3
shidu1(c, j + 21) = one(j)
Next
End If
For j = 4 To 11
shidu(a, j - 3) = one(j)
Next
row = sr.ReadLine
two = row.Split(" ")
p = row.Length
If row.Substring((p - 1), 1) <> "=" Then
For j = 0 To 11
shidu(a, j + 9) = two(j)
Next
row = sr.ReadLine
two = row.Split(" ")
For j = 0 To 3
shidu(a, j + 21) = two(j)
Next
a = a + 1
Else
For j = 0 To 11
shidu(a, j + 9) = two(j)
Next
a = a + 1
Exit Do
End If
End If
Loop Until row.Length < 35
End If
'提取总云量,存入NA(a,j)中
If row = "NA" Then
a = 1
row = sr.ReadLine
p = row.Length
one = row.Split(" ")
If a = 1 Then
For j = 0 To 3
Na1(c, j + 21) = one(j)
Next
End If
For j = 4 To 23
Na(a, j - 3) = one(j)
Next
Do
row = sr.ReadLine
p = row.Length
one = row.Split(" ")
If row.Substring(p - 1, 1) <> "=" Then
one = row.Split(" ")
For j = 0 To 3
Na(a, j + 21) = one(j)
Next
a = a + 1
For j = 4 To 23
Na(a, j - 3) = one(j)
Next
Else
row = row.Substring(0, p - 1)
one = row.Split(" ")
For j = 0 To 3
Na(a, j + 21) = one(j)
Next
a = a + 1
For j = 4 To 23
Na(a, j - 3) = one(j)
Next
'提取低云量
a = 1
row = sr.ReadLine
p = row.Length
one = row.Split(" ")
If a = 1 Then
For j = 0 To 3
展开阅读全文