下面是vb的代码读取一个文件
NI = 0: NJ = 1: NK = 1
numData = 0
Do While Not EOF(1)
Line Input #1, c1
'------------------------------------------------------
nDNL = nDNL + 1
If (nDNL > nDoEventsNumLine) Then
nDNL = 0
RTB.Text = c1
DoEvents
dPB = numTP
dPB = dPB / 100#
dVt = numData
dPB = dVt / dPB
If dPB > 100 Then dPB = 100
PBar.Value = dPB
End If
'------------------------------------------------------
arrStr = Split(c1, " ", -1)
n = UBound(arrStr, 1)
If (n < 1) Then '数组边界
GoTo LOOP_PORO_NEXT
End If
'------------------------------------------------------
For i = 0 To n
s1 = Trim(arrStr(i))
If Len(s1) > 0 Then
firstCh = i
Exit For
End If
Next i
If Not (IsNumeric(arrStr(firstCh))) Then
GoTo LOOP_PORO_NEXT
End If
'------------------------------------------------------
For i = firstCh To n
If arrStr(i) = "" Then
GoTo PORO_NEXT
End If
'--------------------------------------------------
NI = NI + 1
If (NI > NX) Then 'If (NI.GT.NX) Then
NJ = NJ + 1
NI = 1
End If
If (NJ > NY) Then 'If (NJ.GT.NY) Then
NK = NK + 1
NJ = 1
End If
If (NK > NZ) Then 'If (NK.GT.NZ) Then GoTo 200
'MsgBox "孔隙度Z方向数据超出!"
Exit Do
GoTo workErr
NK = NZ
NJ = 1
NI = 1
End If
'--------------------------------------------------
numData = numData + 1
PORO(NI, NJ, NK) = arrStr(i)
PORO_NEXT:
Next i
LOOP_PORO_NEXT:
Loop
If numData <> numTP Then
MsgBox "PORO 数据错误!"
End If我要在 delphi中实现是这样的:这个文件是一个大文件的一部分!!我可以通过关键字‘pop value’找到这部分文件!!但我还是按照上面的方法读取怎么不对了啊!!这是我写的代码
assignfile(f,opendialog1.FileName);
reset(f);
readln(f,skey);
skey:=uppercase(skey);
while sKey = 'POR VALUE' do
begin NI := 0;
NJ := 1;
NK := 1;
numData := 0;
readln(f,c1);
nDNL := nDNL + 1;
If nDNL > nDoEventsNumLine Then
begin
nDNL := 0;
application.ProcessMessages ;
dPB := numTP;
dPB := dPB / 100;
dVt := numData;
dPB := dVt / dPB;
If dPB > 100 Then dPB := 100;
End;
arrstr :=TStringList.Create;
arrstr.DelimitedText := ' ';
arrstr.CommaText :=c1;
//'------------------------------------------------------
If arrstr.Count-1 < 1 Then GoTo LOOP_PORO_NEXT;
//'------------------------------------------------------
For i := 0 To arrstr.Count-1 do
begin
s1 := Trim(arrStr[i]);
If Length(s1) > 0 Then
begin
firstCh := i;
break; //Exit For
end;
end; //Next i
If Not (IsNumeric(arrStr[firstCh])) Then GoTo LOOP_PORO_NEXT; //'------------------------------------------------------
For i := firstCh To arrstr.Count-1 do
begin
If arrStr[i] = ''Then GoTo PORO_NEXT;
//'--------------------------------------------------
NI := NI + 1;
If NI > NX Then
begin
NJ := NJ + 1;
NI := 1;
End; If NJ > NY Then
begin
NK := NK + 1;
NJ := 1;
End; If NK > NZ Then
begin break;// exit; // Exit Do
GoTo workErr;
NK := NZ;
NJ := 1;
NI := 1;
End; numData := numData + 1;
PORO[NI-1][NJ-1][NK-1] := strtofloat(arrStr[i]);
PORO_NEXT:
end; //Next i LOOP_PORO_NEXT:
end; //end while
If numData <> numTP Then showmessage('PORO 数据错误');
难道这样不能从另一个文件读出吗//总是出现:'PORO 数据错误'
NI = 0: NJ = 1: NK = 1
numData = 0
Do While Not EOF(1)
Line Input #1, c1
'------------------------------------------------------
nDNL = nDNL + 1
If (nDNL > nDoEventsNumLine) Then
nDNL = 0
RTB.Text = c1
DoEvents
dPB = numTP
dPB = dPB / 100#
dVt = numData
dPB = dVt / dPB
If dPB > 100 Then dPB = 100
PBar.Value = dPB
End If
'------------------------------------------------------
arrStr = Split(c1, " ", -1)
n = UBound(arrStr, 1)
If (n < 1) Then '数组边界
GoTo LOOP_PORO_NEXT
End If
'------------------------------------------------------
For i = 0 To n
s1 = Trim(arrStr(i))
If Len(s1) > 0 Then
firstCh = i
Exit For
End If
Next i
If Not (IsNumeric(arrStr(firstCh))) Then
GoTo LOOP_PORO_NEXT
End If
'------------------------------------------------------
For i = firstCh To n
If arrStr(i) = "" Then
GoTo PORO_NEXT
End If
'--------------------------------------------------
NI = NI + 1
If (NI > NX) Then 'If (NI.GT.NX) Then
NJ = NJ + 1
NI = 1
End If
If (NJ > NY) Then 'If (NJ.GT.NY) Then
NK = NK + 1
NJ = 1
End If
If (NK > NZ) Then 'If (NK.GT.NZ) Then GoTo 200
'MsgBox "孔隙度Z方向数据超出!"
Exit Do
GoTo workErr
NK = NZ
NJ = 1
NI = 1
End If
'--------------------------------------------------
numData = numData + 1
PORO(NI, NJ, NK) = arrStr(i)
PORO_NEXT:
Next i
LOOP_PORO_NEXT:
Loop
If numData <> numTP Then
MsgBox "PORO 数据错误!"
End If我要在 delphi中实现是这样的:这个文件是一个大文件的一部分!!我可以通过关键字‘pop value’找到这部分文件!!但我还是按照上面的方法读取怎么不对了啊!!这是我写的代码
assignfile(f,opendialog1.FileName);
reset(f);
readln(f,skey);
skey:=uppercase(skey);
while sKey = 'POR VALUE' do
begin NI := 0;
NJ := 1;
NK := 1;
numData := 0;
readln(f,c1);
nDNL := nDNL + 1;
If nDNL > nDoEventsNumLine Then
begin
nDNL := 0;
application.ProcessMessages ;
dPB := numTP;
dPB := dPB / 100;
dVt := numData;
dPB := dVt / dPB;
If dPB > 100 Then dPB := 100;
End;
arrstr :=TStringList.Create;
arrstr.DelimitedText := ' ';
arrstr.CommaText :=c1;
//'------------------------------------------------------
If arrstr.Count-1 < 1 Then GoTo LOOP_PORO_NEXT;
//'------------------------------------------------------
For i := 0 To arrstr.Count-1 do
begin
s1 := Trim(arrStr[i]);
If Length(s1) > 0 Then
begin
firstCh := i;
break; //Exit For
end;
end; //Next i
If Not (IsNumeric(arrStr[firstCh])) Then GoTo LOOP_PORO_NEXT; //'------------------------------------------------------
For i := firstCh To arrstr.Count-1 do
begin
If arrStr[i] = ''Then GoTo PORO_NEXT;
//'--------------------------------------------------
NI := NI + 1;
If NI > NX Then
begin
NJ := NJ + 1;
NI := 1;
End; If NJ > NY Then
begin
NK := NK + 1;
NJ := 1;
End; If NK > NZ Then
begin break;// exit; // Exit Do
GoTo workErr;
NK := NZ;
NJ := 1;
NI := 1;
End; numData := numData + 1;
PORO[NI-1][NJ-1][NK-1] := strtofloat(arrStr[i]);
PORO_NEXT:
end; //Next i LOOP_PORO_NEXT:
end; //end while
If numData <> numTP Then showmessage('PORO 数据错误');
难道这样不能从另一个文件读出吗//总是出现:'PORO 数据错误'
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货