Ошибка: Программа не содержит статического метода "Main", подходящего для точки входа - C#
Формулировка задачи:
Доброго времени суток!
Подскажите, пожалуйста, почему мой Main() является неподходящим для входа?
Заранее премного благодарен!
using System;
using System.Net;
using System.Collections.Generic;
using System.Text;
using System.IO;
class ReadDBF
{
static byte[] f;
static byte[] fut;
static int[, , , , ,] t;
static int[] p;
static ushort[] v0;
static byte b10 = 10, b0 = 48, b9 = 57, del = 127;
static byte B2(int k)
{
byte bn = f[k + 1], b = f[k];
if (b < b0 || b > (byte)53 || bn < b0 || bn > b9)
{
b = del;
Console.WriteLine("Ошибка! Нецифровой символ в дате или времени, или >59 - байт №" + k);
return b;
}
b -= b0;
bn -= b0;
b *= b10;
b += bn;
return b;
}
static void Main ()
{
bool ch = false;
int m, h, l, n, last, leng, j = 1, k = 48, j1 = 0, j2 = 0, jb = 0, j0 = 0, sn = 1, s2, s4, s5, i = 0,
yi, yc, nch = 0, nnoch = 0, near = 0, noint = 0, pi, ds, vi;
int[] s = new int[10];
int[] nf = new int[9];
string[] sf = { "RTS", "SBRF", "Si", "GAZR", "LKOH", "VTBR", "ROSN", "GMKN", "SBPR" };
int[] maxp = { 252000, 9300, 40000, 39000, 29000, 11000, 30000, 90000, 6000 };
int[] minp = { 45000, 1300, 20000, 9700, 9300, 1800, 9000, 10000, 600 };
byte y = b0, mon = 0, dat = 0, hr = 0, mnt = 0, sec = 0, o = 48, q = 0, yn, mn, dn, b23 = 23, b59 = 59, b19 = 19,
sp = 32, a = 42, hy = 45, po = 46, c = 44, co = 58,
R = 82, T = 84, S = 83, B = 66, F = 70, G = 71, A = 65, Z = 90, L = 76, K = 75, O = 79, H = 72, V = 86, P = 80,
N = 78, M = 77, bi = 105;
DateTime dt = DateTime.Now;
yi = dt.Year;
if (yi > 2000)
yi -= 2000;
yn = (byte)yi;
mn = (byte)dt.Month;
dn = (byte)dt.Day;
yi = yn << 8;
yi += mn;
yi <<= 8;
yi += dn;
WebClient user = new WebClient();
...
}}Решение задачи: «Ошибка: Программа не содержит статического метода "Main", подходящего для точки входа»
textual
Листинг программы
using System;
using System.Net;
class ReadDBF
{
static byte[] f; static byte[] fut; static int[, , , , ,] t; static int[] p; static ushort[] v0;
static byte b10 = 10, b0 = 48, b9 = 57, del = 127;
static byte B2(int k)
{
byte bn = f[k + 1], b = f[k];
if (b < b0 || b > (byte)53 || bn < b0 || bn > b9)
{ b = del; Console.WriteLine("Ошибка! Нецифровой символ в дате или времени, или >59 - байт №" + k); return b; }
b -= b0; bn -= b0; b *= b10; b += bn; return b;
}
static void Main(string[] args)
{
bool ch = false;
int m, h, l, n, last, leng, j = 1, k = 48, j1 = 0, j2 = 0, jb=0, j0=0, sn = 1, s2, s4, s5, i = 0,
yi, yc, nch = 0, nnoch = 0, near=0, noint=0, pi, ds, vi;
int[] s = new int[10];
int[] nf = new int[ 9];
string[] sf = { "RTS","SBRF", "Si","GAZR","LKOH","VTBR","ROSN","GMKN","SBPR" };
int[] maxp = { 252000, 9300, 40000, 39000, 29000, 11000, 30000, 90000, 6000 };
int[] minp = { 45000, 1300, 20000, 9700, 9300, 1800, 9000, 10000, 600 };
byte y = b0, mon = 0, dat = 0, hr = 0, mnt = 0, sec = 0, o = 48, q=0, yn, mn, dn, b23=23, b59=59, b19=19,
sp = 32, a = 42, hy = 45, po = 46, c = 44, co = 58,
R = 82, T = 84, S = 83, B = 66, F = 70, G = 71, A = 65, Z = 90, L = 76, K = 75, O = 79, H = 72, V = 86, P = 80,
N = 78, M = 77, bi = 105;
DateTime dt = DateTime.Now; yi = dt.Year; if (yi > 2000) yi -= 2000; yn = (byte)yi; mn = (byte)dt.Month; dn = (byte)dt.Day;
yi = yn << 8; yi += mn; yi <<= 8; yi += dn;
WebClient user = new WebClient();
// цикл по дате
string uri = "http://ftp.rtsnet.ru/pub/FORTS/pubstat/20100901/fut_deal.dbf";
try
{
Console.WriteLine("побайтное чтение файла " + uri);
f = user.DownloadData(uri);
}
catch (WebException exc)
{
Console.WriteLine(exc);
}
catch (NotSupportedException exc)
{
Console.WriteLine(exc);
}
Console.WriteLine("чтение закончилось");
/* f[b];
собственно заголовок b=0-31
b=04 4 m=RecordsCount Количество записей в таблице Все
b=08 2 h=HeaderSize Размер заголовка в байтах Все
b=10 2 l=RecordSize Размер записи в байтах Все
b=16 + начало описания n-го поля 1 Byte s[n] - Размер поля см. Таблицу 4 Все
n - число полей (столбцов) */
m = (((((f[4] << 8) + f[5]) << 8) + f[6]) << 8) + f[7];
h = (f[8] << 8) + f[9];
l = (f[10] << 8) + f[11];
n = (h - 33) / 32;
last = h + m * l; leng = f.Length;
if (last + 1 != leng) Console.WriteLine("Внимание!!! last=" + last + ", а f.Length=" + leng);
s[0] = 1; for (; j <= n; j++, k += 32) { s[j] = f[k]; sn += s[j]; }
s2 = s[1] + s[2]; s4 = s2 + s[3] + s[4]; s5 = s4 + s[5];
// запись в файл всех переменных и байтов заголовка
if (sn != l || f[h - 1] != (byte)13 || f[last] != (byte)26)
{ Console.WriteLine("Заголовок " + uri + " или записи - испорчены!!!"); return; } //goto save; вместо return
if (y == b0)
{
j1 = h + s[1] - 7;
dat = B2(j1); if (dat == del || f[j1 + 2] != po) return; if (dat > (byte)31 || dat < (byte)1) { Console.WriteLine("дата=", +dat + "байт №" + j1); return; }
mon = B2(j1 + 3); if (mon == del || f[j1 + 5] != po) return; if (mon > (byte)12 || mon < (byte)1) { Console.WriteLine("месяц=", +mon + "байт №" + (j1 + 3)); return; }
y = B2(j1 + 6); if (y == del) return; if (y > (byte)12 || y < (byte)8) { Console.WriteLine("месяц=", +mon + "байт №" + (j1 + 3)); return; }
yc = (((y << 8) + mon) << 8) + dat; if (yc > yi) { Console.WriteLine("дата ещё не наступила, байт №" + j1); return; }
y -= (byte)8; mon--; dat--;
j2 = j1 + 8;
hr = B2(j2); if (hr == del || f[j2 + 2] != co) return; if (hr > b23) { Console.WriteLine("час=", +hr + "в байте №" + j2); return; }
mnt = B2(j2 + 3); if (mnt == del || f[j2 + 5] != co) return;
sec = B2(j2 + 6); if (sec == del) return;
}
for (k = h; k < last; k += l)
{
if (f[k] != sp || f[k] != a) { Console.WriteLine("Испорчен флаг удаления uri=" + uri + " байт №" + k); return; }//goto save;
j = k + s[1] - 7;
if (f[j] != f[j1] || f[j + 1] != f[j1 + 1])
{
dat = B2(j); if (dat == del || f[j + 2] != po) return; if (dat > (byte)31 || dat < (byte)1) { Console.WriteLine("дата=", +dat + "байт №" + j); return; }
mon = B2(j + 3); if (mon == del || f[j + 5] != po) return; if (mon > (byte)12 || mon < (byte)1) { Console.WriteLine("месяц=", +mon + "байт №" + (j + 3)); return; }
y = B2(j + 6); if (y == del) return; if (y < (byte)8) { Console.WriteLine("месяц=", +mon + "байт №" + (j + 3)); return; }
yc = (((y << 8) + mon) << 8) + dat; if (yc > yi) { Console.WriteLine("дата ещё не наступила, байт №" + j); return; }
y -= (byte)8; mon--; dat--;
j1 = j;
}
j += 14;
ch = f[j + 1] != f[j2 + 7] || f[j] != f[j2 + 6] || f[j - 2] != f[j2 + 4] || f[j - 3] != f[j2 + 3] || f[j - 5] != f[j2 + 1] || f[j - 6] != f[j2];
if (ch)
{
nch++;
hr = B2(j - 6); if (hr == del || f[j - 4] != co) return; if (hr > b23) { Console.WriteLine("час=", +hr + "в байте №" + (j - 6)); return; }
mnt = B2(j - 3); if (mnt == del || f[j - 1] != co) return;
sec = B2(j); if (sec == del) return;
j2 = j;
if (hr < b10) continue;
hr -= b10;
}
else nnoch++;
//DATE,D TIME,C,8 ISIN,C,25 PRICE,N,20,5 VOL,N,10,0 ID_DEAL,N,10,0 TYPE,N,1,0
//1 2 3 4 5 6 7
//последние п е р в ы е п о с л е д н и е
// sp пробел; a *; hy -; po .; c ,; co :; b0 символ 0; b9 символ 9; b10 число 10;
j = k + s2 + 1;
o = b0; // 0-RTS 1-SBRF 2-Si 3-GAZR 4-LKOH 5-VTBR 6-ROSN 7-GMKR 8-SBPR
if (f[j] == R)
{
if (f[j + 1] == T && f[j + 2] == S && f[j + 3] == hy) { o = 0; j += 4; }
else if (f[j + 1] == O && f[j + 2] == S && f[j + 3] == N && f[j + 4] == hy) { o = 6; j += 5; } else continue;
}
else if (f[j] == S)
{
if (f[j + 1] == B && f[j + 4] == hy) if (f[j + 2] == R && f[j + 3] == F) { o = 1; j += 5; }
else if (f[j + 2] == P && f[j + 3] == R) { o = 8; j += 5; } else continue;
else if (f[j + 1] == bi && f[j + 2] == hy) { o = 2; j += 3; } else continue;
}
else if (f[j] == G && f[j + 3] == R && f[j + 4] == hy) if (f[j + 1] == A && f[j + 2] == Z) { o = 3; j += 5; }
else if (f[j + 1] == M && f[j + 2] == K) { o = 7; j += 5; } else continue;
else if (f[j] == L && f[j + 1] == K && f[j + 2] == O && f[j + 3] == H && f[j + 4] == hy) { o = 4; j += 5; }
else if (f[j] == V && f[j + 1] == T && f[j + 2] == B && f[j + 3] == R && f[j + 4] == hy) { o = 5; j += 5; } else continue;
if (o == b0) { Console.WriteLine("Ошибка в программе!!! o>8, т.е. нужного фьючерса нет, но на continue не попадает"); return; }
if (f[j + 1] == po)
{
if (f[j + 4] == po || f[j + 3] == po) { Console.WriteLine("Другой формат даты исполнения фьючерса - байт №" + j); continue; }
if (f[j + 4] != sp) { Console.WriteLine("Слишком длинная дата исполнения фьючерса - байт №" + j); continue; }
if (f[j] < b0 || f[j] > b9) { Console.WriteLine("Нецифровой символ вместо месяца исполнения фьючерса - байт №" + j); return; }
q = B2(j + 2); if (q < (byte)8 || q > yn + (byte)1) { Console.WriteLine("Ошибочный год исполнения фьючерса - байт №" + (j + 3)); return; }
q = f[j]; q -= b0; if (q != (byte)3 && q != (byte)6 && q != (byte)9) { Console.WriteLine("Промежуточный месяц исполнения фьючерса - байт №" + j); continue; }
}
else
{
if (f[j + 2] != po) { Console.WriteLine("Нет точки в дате исполнения фьючерса - байт №" + j); return; }
if (f[j + 5] == po || f[j + 4] == po) { near++; continue; }
if (f[j + 5] != sp) { Console.WriteLine("Слишком длинная дата исполнения фьючерса - байт №" + j); continue; }
q = B2(j + 3); if (q < (byte)8 || q > yn + (byte)1) { Console.WriteLine("Ошибочный год исполнения фьючерса - байт №" + (j + 4)); return; }
q = B2(j); if (q == (byte)0 || q > (byte)12) { Console.WriteLine("Ошибочный месяц исполнения фьючерса - байт №" + j); return; }
if (q != (byte)12 && q != (byte)3 && q != (byte)6 && q != (byte)9) { Console.WriteLine("Промежуточный месяц исполнения фьючерса - байт №" + j); continue; }
}
j0=k+s4; jb=j0-7;
for (j = j0; j > jb; j--)
{ if (f[j] == c || f[j] == po) { noint++; goto cont_k; }
if (f[j] == sp) break;
if (f[j] < b0 || f[j] > b9) { Console.WriteLine("Нецифровой символ в цене фьючерса - байт №" + j); return; }
}
if (j == j0) { Console.WriteLine("Ошибка!!! Нет цены в конце её поля - байт №" + j); return; }
pi = f[j0] - 48; ds = 10;
for (jb = j0 - 1; jb > j; jb--) { pi += (f[jb] - 48) * ds; ds *= 10; }
if (pi > maxp[o] || pi < minp[o]) { Console.WriteLine("Ошибка!!! Цена - вне диапазона - байт №" + jb); return; }
j0 = k + s5; jb = j0 - 7;
for (j = j0; j > jb; j--)
{
if (f[j] == sp) break;
if (f[j] < b0 || f[j] > b9) { Console.WriteLine("Нецифровой символ в объёме" + j); return; }
}
if (j == j0) { Console.WriteLine("Ошибка!!! Нет объёма в конце его поля - байт №" + j); return; }
vi = f[j0] - 48; ds = 10;
for (jb = j0 - 1; jb > j; jb--) { vi += (f[jb] - 48) * ds; ds *= 10; }
if (vi == 0) {Console.WriteLine("Ошибка!!! Нулевой объём, o=" + o + "байт №" + jb); return; }
if (vi > 65535) { vi = 65535; Console.WriteLine("Объём > 65535 o=" + o + "байт №" + jb); }
nf[o]++;
p[i] = pi; v0[i] = (ushort)vi;
if (ch) { t[y, mon, dat, hr, mnt, sec] = i; ch = false; }
o <<= 4; o += q; fut[i] = o;
i++;
cont_k:;}
for (j=0; j <= n; j++) Console.WriteLine("s[" + j + "]=" + s[j]);
Console.WriteLine("m=" + m + " i=" + i + " nch=" + nch + " nnoch=" + nnoch + " near" + near + " noint=" + noint);
// конец цикла по датам
// чтение не существующего файла
uri = "http://ftp.rtsnet.ru/pub/FORTS/pubstat/20100828/fut_deal.dbf";
try
{
Console.WriteLine("побайтное чтение файла " + uri);
f = user.DownloadData(uri);
}
catch (WebException exc)
{
Console.WriteLine(exc);
}
catch (NotSupportedException exc)
{
Console.WriteLine(exc);
}
Console.WriteLine("чтение закончилось");
for (j = 0; j < 9; j++) Console.WriteLine(sf[j] + "- " + nf[j]);
dialog: Console.WriteLine("час :"); hr = Convert.ToByte(Console.ReadLine());
if (hr > b23) { Console.WriteLine("час > 23"); goto dialog; }
if (hr > b19) { mon = 7; dat = 30; }
hr -= b10;
dm: Console.WriteLine("минута :"); mnt = Convert.ToByte(Console.ReadLine());
if (mnt > b59) { Console.WriteLine("минута > 59"); goto dm; }
sm: Console.WriteLine("секунда :"); sec = Convert.ToByte(Console.ReadLine());
if (sec > b59) { Console.WriteLine("секунда > 59"); goto sm; }
k = t[y, mon, dat, hr, mnt, sec];
if(k==(byte)0) {Console.WriteLine("на этой секунде не было тиков"); goto sm;}
for (n = sec + 1; n < 60; n++) { j = t[y, mon, dat, hr, mnt, n]; if (j > k) goto end; }
if (mnt >= b59) { if (h >= b23) j = k; else {sec = 0; mnt = 0; hr++; j = t[y, mon, dat, hr, mnt, sec];} }
else { mnt++; sec = 0; }
end: for (i = k; i <= j; i++) { o = fut[i]; q=o; o >>= 4; q <<= 4; q >>= 4;
Console.WriteLine(sf[o] + "-" + q + "." + (y + 8) + " p=" + p[i] + " v=" + v0[i]);}
goto dialog;
}
}