У меня есть процедура Fortran, которая читает данные из файла, подобного этому:
10 READ(X,*,ERR=8000,END=9000) ... Read header line of data sequence
C Some processing of header line data...
READ(X,*,ERR=8000) ... Read secondary line of data sequence
C Some processing of secondary line data...
20 READ(X,*,ERR=8000) ... Read data line
IF data contains 'X' GOTO 10
C Do some calculations with the data ...
IF (X.LT.Y)
GOTO 10
C Do some more calculations ...
100 CONTINUE
8000 'Output some error to the log'
9000 'Some final stuff'
RETURN
Оригинальный код намного длиннее, но это суть.
Я думаю, что код C #, как показано ниже, должен делать то же самое (кодирование из памяти, поэтому могут быть некоторые ошибки ...), но по некоторым причинам это кажется чрезвычайно сложным для достижения того же результата. Есть ли простой способ повторить поток рутины Фортрана? Это просто случай, когда использование gotos обеспечивает более короткий код, чем использование блоков кода?
private void MyFunction(Stream MyData)
{
string s = string.Empty;
bool flag;
StreamReader sr = new StreamReader(MyData);
try
{
while (!sr.EndOFStream)
{
s = sr.ReadLine(); ... Read header line of data sequence
//Some processing of header line data ...
s = sr.Readline(); ... Read secondary line of data sequence
//Some processing of secondary line data ...
flag = false;
while (!(s = sr.ReadLine()).Contains("X"))
{
//Do some calculations with the data ...
if (X < Y)
{
flag = true;
break;
}
//Do some more calculations ...
}
if (flag) continue;
}
//Some final stuff ...
return;
}
catch
{
//Output error to log...
}
}