Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/22: Рейтинг темы: голосов - 22, средняя оценка - 4.50
 Аватар для Fly_fox
0 / 0 / 0
Регистрация: 22.07.2009
Сообщений: 10

Исправление ошибок в коде С#

22.07.2009, 11:26. Показов 4235. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет всем.Я переделываю прогу с С++ на С#.Программа находит текстовый файл,который указывает на БД и считывает путь к базе и адрес SQL-server.Код проги на С++:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
bool CTestDBApp::GetPathGredBaseFromFile(CString& Path,CString& kdb)
{
    CStdioFile f;
    CString s,strDBMS,FileName = m_szMainDir;
    FileName += _T("\\BaseName.txt");
    int i,len;
    strDBMS.Empty();
//  Проверяем наличие файла
    if ( GetFileAttributes(FileName) == 0xffffffff ) 
    {  
        Path = "s:\\Systel\\Bin\\" ; 
        kdb.Empty();
    }
    else if( !f.Open( FileName, CFile::modeRead ) ) 
    {  
        AfxMessageBox(_T("Не могу открыть файл ") + FileName + _T(" !"),MB_OK);
        return false;
    }
    else
    {
        if (f.ReadString(Path)) 
        {
            if (Path.Right(4) == _T(".mdb") ) 
            {
                s = LastName(Path);
                i = s.GetLength();
                len = Path.GetLength();
                s = Path.Left(len-i);
                Path = s;
            }
            if (f.ReadString(kdb)) f.ReadString(strDBMS);
        }
        f.Close();
    }
    if (Path[1] == ':') m_DISK = Path[0];
    if (strDBMS.IsEmpty()) m_nModeDBMS = 0;
    else if (strDBMS[0] == 'A' ) m_nModeDBMS = 0;
    else if (strDBMS[0] == 'S' ) 
    {
        i = strDBMS.Find(_T("="));
        if (i < 0) 
        {   
            AfxMessageBox(_T("Не задан SQL Server !"),MB_OK);
            return false;
        }
        len = strDBMS.GetLength();
        while ( ++i < len && isspace(strDBMS[i]) ) ;
        if (i == len) 
        {   
            AfxMessageBox(_T("Не задан SQL Server !"),MB_OK);
            return false;
        }
        m_SystelSQL = strDBMS.Right(len-i);
        m_nModeDBMS = 1;
    }
    return true;
}
Так как я совсем еще "зеленый" новичок в С#, то не могу понять как правильно переделать код.Буду очень признательна за помощь и коменты к ошибкам.Вот мой "переделанный" код:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using System.IO;
using System.Text;
 
namespace Read
{
   static class Reader
    {
        [STAThread]
         static void Main()
        {
            
            FileStream fstream;
            String kdb, s, SystelSQL, Disk, Path, Name, strDBMS;
            int i, len, NModeDBMS;
            strDBMS = "";
            Name = Application.StartupPath + "\\BaseName.txt";
           
            //Проверяем наличие файла
            if (!File.Exists(Name))
            {
                MessageBox.Show("Не могу открыть файл");
              
            }
            else if  (File.Exists(Name))
            {
                Path = "s:\\Systel\\Bin\\";
                kdb = "";
                
            }
 
            else
            {
                fstream = new FileStream(Name, FileMode.Open, FileAccess.Read); 
                if (fstream.[COLOR="#ff0000"]Read[/COLOR](Path))
                {
                    if (fstream.[COLOR="#ff0000"]Read[/COLOR](kdb)) fstream.[COLOR="#ff0000"]Read[/COLOR](strDBMS);     //[B]Тут не знаю как сделать так,чтобы из текстового файла к kdb присваивалось значение 2 строки,а к strDBMS 3 строки[/B]
                }
                fstream.Close();
            }
            if (Path[1] == ':') [COLOR="#ff0000"]Path[0] = Disk[/COLOR];//здесь пишет что не возможно конвертировать String to Char
            if (strDBMS= "") NModeDBMS = 0;// тоже самое
            else if (strDBMS[0] == 'A') NModeDBMS = 0;
            else if (strDBMS[0] == 'S')
            {
                i = s[COLOR="#ff0000"]trDBMS.Insert("=")[/COLOR];//здесь хотела сделать проверку на наличие адреса SQL Server
                
                if (i < 0)
                {
                    MessageBox.Show("Не задан SQL Server!");
                  
                }
                len = strDBMS.[COLOR="#ff0000"]Length()[/COLOR];//не хочет длину строки считать
                while (++i < len);
                if (i == len)
                {
                    MessageBox.Show("Не задан SQL Server!");
                    
                }
                
                SystelSQL = strDBMS.[COLOR="#ff0000"]Contains[/COLOR](len-i);//не знаю какой метод тут правильней использовать
                NModeDBMS = 1;
            }
          
        }
    }
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.07.2009, 11:26
Ответы с готовыми решениями:

Исправление ошибок
Нужно сделать чтобы для ромба нужно было вводить 2 диагонали, а не то что мы вводим для прямоугольника или параллелограмма. Заранее...

исправление ошибок
Помогите исправить ошибки. Очень нужно сделать. Буду очень благодарен. Вот список ошибок. Строка 122 ошибка CS1061:...

Исправление ошибок в коде
Выводит ошибки C4018 и еще пару ошибок компилятора #include &lt;iostream&gt; #include &lt;iomanip&gt; #include...

16
 Аватар для Sergei
1513 / 780 / 103
Регистрация: 22.04.2008
Сообщений: 1,610
22.07.2009, 11:52
Попробуйте так
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
      void ReadTextFile(string fname)
        {
            FileStream fs = new FileStream(fname, FileMode.Open, FileAccess.Read);
            StreamReader sr = new StreamReader(fs);
            string curline;
            string str2;
            string str3;
            int i = 1;
            while ((curline = sr.ReadLine()) != null)
            {
                if (i == 2)
                {
                    str2 = curline;//Читаем 2 строку 
                }
                if (i == 3)
                {
                    str3 = curline;//Читаем 3 строку.
                }
                i++;
            }
            sr.Close();
        }
1
 Аватар для Fly_fox
0 / 0 / 0
Регистрация: 22.07.2009
Сообщений: 10
24.07.2009, 09:35  [ТС]
Sergei,огромное спасибо.=))))Очень помогли.А то я закопалась в функцией byte,получались лишние символы.
А как правильно написать проверку к 3-ей строке.Там нужно проверить есть ли адрес сервера.сначала проверяет есть знак "=",если его нет,то Сервер не задан.И вторая проверка совпадает ли кол-во символов до знака "=" и общее кол-во знаков в 3-ей строке.Какие фунуции и методы здесь лучше использовать???

Добавлено через 18 часов 34 минуты 21 секунду
SQL Server = 162.162.45.76; -это 3-я строка из файла.
мне нужно пробы переменная,например, i посчитала кол-во знаков до =(ну то есть слова SQL Server).А переменная, например len, получала длину оставшихся символов после знака =(т.е.162.162.45.76)
0
Эксперт JavaЭксперт С++
 Аватар для M128K145
8384 / 3617 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
24.07.2009, 09:44
Fly_fox, а код на плюсах точно работал?
0
 Аватар для Sergei
1513 / 780 / 103
Регистрация: 22.04.2008
Сообщений: 1,610
24.07.2009, 10:37
Думаю вот так.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
        void ReadTextFile(string fname)
        {
            
            FileStream fs = new FileStream(fname, FileMode.Open, FileAccess.Read);
            StreamReader sr = new StreamReader(fs);
            string curline;
            string str2;
            string str3;
            int i = 1;
            int l1 = 0, l2 = 0;
            char [] delim = new char [] {'='};
            string[] words;
            while ((curline = sr.ReadLine()) != null)
            {
                if (i == 2)
                {
                    str2 = curline;
                }
                if (i == 3)
                {
                    str3 = curline;
                }
                i++;
            }
            sr.Close();
            words = str3.Split(delim);//разбиваем строку по разделителям
            words[0].Trim();
            words[1].Trim();
            l1 = words[0].Length;//длина первой подстроки
            l2 = words[1].Length;//Длина второй подстроки
        }
1
 Аватар для Fly_fox
0 / 0 / 0
Регистрация: 22.07.2009
Сообщений: 10
28.07.2009, 09:56  [ТС]
M128K145, да на плюсах точно работает.Но нужно учесть,что это часть от кода программы
0
MCSD: APP BUILDER
 Аватар для IT_Exp
8795 / 1074 / 104
Регистрация: 17.06.2006
Сообщений: 32,602
28.07.2009, 10:07
Fly_fox,
на c# всё это делается намного проще.
приведи содержимое текстового файла и что надо из него взять, вникать в этот код неохота.
0
 Аватар для Fly_fox
0 / 0 / 0
Регистрация: 22.07.2009
Сообщений: 10
28.07.2009, 10:38  [ТС]
Rififi,
S:\Systel\Bin\
S:\Systel\Kd\
SQL Server = 162.162.45.76;-это то что содержится в текстовом файле;
нам нужно проверить наличие данного текст.файла(BaseName.txt),потом первую строчку присвоить к переменной Path, 2-ую строку к kdb и 3-ю строку к strDBMS.(ну в принципе это у меня сделано)
далее 3-я строка проверяется как подключаемся к БД:через ACCESS или SQL Server.Если используется SQL,то проверяем на правильность указания адреса сервера.Т.е. находим есть ли знак =(нет в наличии значит ошибка),если есть то сравниваем длину символов до знака = и после него

Добавлено через 3 минуты 26 секунд
Sergei, еще раз спасибо за помощь =) Есть однамаленькая ошибка при компеляции- ругается на то что переменная str3 не была неназначенной(Use of unassigned local variable 'str3')
0
Эксперт JavaЭксперт С++
 Аватар для M128K145
8384 / 3617 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
28.07.2009, 10:43
Fly_fox,
C#
1
string str3 = "";
0
 Аватар для Fly_fox
0 / 0 / 0
Регистрация: 22.07.2009
Сообщений: 10
28.07.2009, 10:53  [ТС]
если написать вот так,то ошибок нет:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 while ((curline = sr.ReadLine()) != null)
            {
                if (i == 2)
                {
                    str2 = curline;
                }
                if (i == 3)
                {
                    str3 = curline;
words = str3.Split(delim);//разбиваем строку по разделителям
            words[0].Trim();
            words[1].Trim();
            l1 = words[0].Length;//длина первой подстроки
            l2 = words[1].Length;//Длина второй подстроки
                }
                i++;
            }
            sr.Close();
            
        }
Добавлено через 2 минуты 48 секунд
M128K145, там str3 не должна быть пустой =) Эта переменная принимает значение 3-ей строки из файла
0
MCSD: APP BUILDER
 Аватар для IT_Exp
8795 / 1074 / 104
Регистрация: 17.06.2006
Сообщений: 32,602
28.07.2009, 11:02
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
private const string ini_file = "settings.ini";
private readonly Regex HostValid = new Regex(
    @"([^=]+?)\s*=\s*(?<IP>(2[0-4]\d|25[0-5]|[01]?\d\d?)\.(2[0-4]\d|25[0-5]|[01]?\d\d?)\.(2[0-4]\d|25[0-5]|[01]?\d\d?)\.(2[0-4]\d|25[0-5]|[01]?\d\d?))",
    RegexOptions.Compiled);
 
private const string SqlCnn = "Data Source={0};Initial Catalog=myDataBase;User Id=myUsername;Password=myPassword;";
 
public bool IsValid()
{
    try
    {
        string path, kdb, sql_host;
        using (var rd = new StreamReader(ini_file))
        {
            path = rd.ReadLine().Trim();
            kdb = rd.ReadLine().Trim();
            var mc = HostValid.Match(rd.ReadLine().Trim());
            if (!mc.Success)
                throw new ArgumentException("invalid sql host");
            sql_host = mc.Groups["IP"].Value;
        }
        var ff = DbProviderFactories.GetFactory("System.Data.SqlClient");
        using (var cnn = ff.CreateConnection())
        {
            cnn.ConnectionString = string.Format(SqlCnn, sql_host);
            cnn.Open();
            cnn.Close();
        }
                
        Console.WriteLine("{0}, {1}, {2}", path, kdb, sql_host);
        return true;
    }
    catch (Exception)
    {
        return false;
    }
}
Проверку соединения в принципе можно и не делать...
1
 Аватар для Fly_fox
0 / 0 / 0
Регистрация: 22.07.2009
Сообщений: 10
28.07.2009, 15:01  [ТС]
Прога почти доделана,ура =))))))Как замечательно,что зарегилась здесь.Осталась последняя загвоздка с проверкой исользуется ACCESS или SQL.
if (strDBMS ='A')// т.е. если последняя строчка ACCESS
{
SystelSQL = strDBMS;
}
Конечно же (strDBMS ='A') не прокатывает.Только не знаю как правильно здесь написать условие((
0
1923 / 428 / 41
Регистрация: 12.07.2007
Сообщений: 2,062
29.07.2009, 02:18
Цитата Сообщение от Fly_fox Посмотреть сообщение
Конечно же (strDBMS ='A') не прокатывает.
C#
1
2
3
4
5
6
7
8
9
10
11
//srtDBMS - string
//'A' - char
if (strDBMS=="A")
{
SystelSQL = strDBMS;
}
//или
if (strDBMS.Equals("A"))
{
SystelSQL = strDBMS;
}
1
 Аватар для Fly_fox
0 / 0 / 0
Регистрация: 22.07.2009
Сообщений: 10
29.07.2009, 10:03  [ТС]
Условие проверяет if (strDBMS.Equals("A")),а {SystelSQL = strDBMS;} не выполняет.А если написать таК усё работает:
if (strDBMS.Equals("ACCESS"))
{
SystelSQL = strDBMS;
}
Для общего развития,как в шарпе осуществить проверку по начальной букве?=)
0
 Аватар для Sergei
1513 / 780 / 103
Регистрация: 22.04.2008
Сообщений: 1,610
29.07.2009, 11:01
Вот так
C#
1
2
3
4
if(strDBMS[0]=='A')
{
///
}
1
 Аватар для Fly_fox
0 / 0 / 0
Регистрация: 22.07.2009
Сообщений: 10
29.07.2009, 12:01  [ТС]
Sergei, Спасибо ))))А я пробовала if(strDBMS[0]='A') и он ругалси =) Как всегда женщины пропустят самое главное == .
Большое человеческое всем пасиба за помощь
0
 Аватар для Fly_fox
0 / 0 / 0
Регистрация: 22.07.2009
Сообщений: 10
15.03.2010, 10:33  [ТС]
Тут еще один вопрос появился - Добавление ссылки на проект
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.03.2010, 10:33
Помогаю со студенческими работами здесь

Исправление ошибок в коде
При компиляции выдает ошибку expected unqualified-id before 'while' #include &lt;iostream&gt; #include &lt;cmath&gt; double x, ep, s; int z,...

Исправление ошибок в коде
Прошу помощи в исправлении кода для сортировки двумерного массива по убыванию методом Шелла. Сам код: const n=4; var ...

Исправление ошибок в коде
Нужно исправить все ошибки в этом коде. Заранее спасибо.

Исправление ошибок в коде
Ребят, помогите пожалуйста, уже завтра экзамен, а я понятия не имею как исправить ошибки в данном коде(строки с ошибками помечены так (*))....

Исправление ошибок в коде
Компилятор находит ошибки , просьба помочь исправить ошибки в коде #include &lt;avr/io.h&gt; #include &lt;avr/interrupt.h&gt; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru