Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Перенос кода с одного компилятора на другой…  (Прочитано 5620 раз)
0 Пользователей и 1 Гость смотрят эту тему.
FanatWin
Участник

ru
Offline Offline

WWW
« : 01-06-2009 17:48 » 

Помогите перевести код «Visual Studio 2008 Express» на «Borland C++Builder 6».

Пожалуйста, кто-нибудь помогите…я, уже буквально, выбился из сил… код вроде и простой, но я не как не догоняю (не могу найти аналоги в C++), как его перевести на «Borland C++Builder 6» оригинал написан на C#  «Visual Studio 2008 Express»…


Код:
List<Var> Variablen = new List<Var>();

       public bool ReadMyFile(string p)  // Здесь принимается строка с именем файла
        {
            Variablen.Clear(); // Вот здесь не пойму наверное это массив
            if (p.Trim().Length==0||!File.Exists(p))
            {
                MessageBox.Show(MBFILENOTFOUND, MBTFILEERROR);
                return false;
            }
            string Oldname = currentFileName;
            this.Text = TITLE +" - "+ p.Replace(path,"");
            currentFileName = p;
            dialogMode = true; 
            dialogBegin = false;
            byte[] ByteArray; //в C++есть такой массив но как он применён здесь не понятно
            try
            {
                ByteArray = File.ReadAllBytes(p); // Заносится файл в массив
// как такое сделать на C++ знаю но можно
 // просто читать файл до конца с помощью fgetc(file) по симвалам
            }
            catch
            {
                MessageBox.Show(MBFILENOTREAD, MBTFILEERROR);
                return false;
            }
           
            int strlength = 0;
            int position = 0;
            string varname = "";
            int value=0;
            bool Readmode = false;
            int i = 0;
            int Count0A = 0;
            int MaxByte = 0;
            while (i < ByteArray.Length)
            {
             
                if (ByteArray[i]==0x0A)
                {
                    Count0A++;
                    if (Count0A > 6)
                    {
                        i++;
                    }
                }
                if (ByteArray[i] == 0x02
                && ByteArray[i+1] == 0x00
                && ByteArray[i+2] == 0x00
                && ByteArray[i+3] == 0x00
                && ByteArray[i+4] == 0x01
                && ByteArray[i+5] == 0x00
                && ByteArray[i+6] == 0x00
                && ByteArray[i+7] == 0x00)
                {
                    break;
                }
                i++;
            }

            i += 8;
            MaxByte = BitConverter.ToInt32(ByteArray, i);
            i += 3;
           
            while (i < MaxByte)
            {
               
                try
                {
                   
                    if (ByteArray[i] == 0x12)
                    {
                       
                        if (dialogMode)
                        {
                            value = JumpNr(ref ByteArray, ref i, ref position);
                           
                        }
                        else
                        {
                           
                            if (Readmode == true && varname.Trim().Length > 0)
                            {
                               
                                value = JumpNr(ref ByteArray, ref i, ref position);

                                if (dialogEnd)
                                {
                                    dialogEnd = false;
                                }
                                else
                                {
                                   
                                    Variablen.Add(new Var(varname, value, position));
                                }
                                i--;
                                Readmode = false;
                               
                            }
                        }
                    }
                    else if (ByteArray[i]== 0x01)
                    {
                        strlength=ReadLength(ref ByteArray, ref i);
                        if (strlength >0)
                        {
                            varname = ReadName(ref ByteArray, ref i, strlength);
                        }

                       
                     
                           
                            if (varname.Trim().Length > 0)
                            {
                                if (dialogMode && dialogBegin)
                                {

                                    Variablen.Add(new Var(varname, value, position));
                                }
                                else
                                {
                                    Readmode = true;
                                }
                               
                            }
                       
                    }
                   

                }
                catch
                {
                    break;
                   
                }
                i++;
            }
            Variablen.Sort();
            if (Variablen.Count == 0)
            {
                MessageBox.Show(MBFILENOTREAD, MBTFILEERROR);
                currentFileName = Oldname;
                this.Text = TITLE + " - " + currentFileName.Replace(path, "");
                return false;
            }
            return true;
        }


Вспомогательные функции…

        public string ReadName(ref byte[] b, ref int z, int l)
        {
            StringBuilder  r = new StringBuilder(2048);
            string s;
            int i;
            for ( i = z; i < z+l; i++)
            {
                r.Append((char)(b[i]));
               
            }
            s = r.ToString();
           
            z += s.Length-1;

            if (tagebuchmode && s==("[]"))
            {
                tagebuchmode = false;
                return "";
            }
            if (tagebuchmode)
            {
                return "";
            }
            return s;
        }

        public int JumpNr(ref byte[] b,ref int z, ref int k)
        {
            int d2 = 0;
            int r = 0;           
            while (b[z]==0x12)
            {
                z +=5;
                if (b[z] != 0x01)
                {

                    if (dialogBegin && b[z] == 0x02)
                    {
                        tagebuchmode = true;
                        dialogMode = false;
                        dialogEnd = true;
                        dialogBegin = false;
                    }
                    z++;
                    k = z;
                    if (dialogBegin == false && d2 < 2)
                    {
                        r = BitConverter.ToInt32(b, z);
                        d2++;
                    }
                    z += 4;
                    if (b[z - 5] != 2)
                    {
                    }
                    if (dialogMode && b[z-5] == 0x06)
                    {
                        dialogBegin = true;
                        return r;
                    }
                }
                 
               
            }
            return r;
        }

        public int ReadLength(ref byte[] b, ref int z)
        {
            int r = 0;
            z += 1;
            r = BitConverter.ToInt16(b, z);
            z += 2;
            return r;
        }


Вспомогательные не так важны, я просто их привел, чтоб понятно было… мне б с первой разобраться, а остальное я сам сделаю.

Да, боже мой, чуть не забыл, пояснить, что это всё значит.
В первую функцию передаётся имя файла, … и она его читает в бинарном режиме и находит в нём значения, которые после выводятся в «Variablen»  (что-то типа структуры как я понял или массива)
(Сам файл смешанный, на половину текстовый, на половину бинарный, т.е. значения в нём даны в бинарном виде, а переменные хранящие эти значения в текстовом)

пожалуйста… кому не трудно помогите…

З.Ы. Модераторам, если не правильно выбрал раздел просьба не удалять, а перенести в соответствующий…
Записан

Вад
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 01-06-2009 18:07 » 

List - это контейнер. Я так понимаю, его можно заменить на std::list или что-нибудь ещё в том же духе.
Файл в C++ можно просто открыть как поток (std::ifstream) и читать оттуда побайтово.
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #2 : 01-06-2009 18:08 » 

Код:
List<Var> Variablen = new List<Var>();
Аналог STLовского list http://www.cplusplus.com/reference/stl/list/ По ссылке также найдеш, методы данного класса.
Код:
byte[] ByteArray;
Почти прямого стандартного аналога нет. Так как в Шарпе с массивом можно работать, как с отдельным классом. Но если не охота возится вручную с массивами. То можно использовать например vector http://www.cplusplus.com/reference/stl/vector/

Код:
ByteArray = File.ReadAllBytes(p);
Насколько я помню, просто читаются из файла все байты.

На твоем месте, я бы выдрал бы только нужную мне логику, а обвязку бы написал бы сам. Прямой перевод кода с шарпа не благодарное дело.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
FanatWin
Участник

ru
Offline Offline

WWW
« Ответ #3 : 02-06-2009 16:58 » 

Вад и Finch
Спасибо это то, что нужно… сам я пока новичок и сразу же полез в такие дебри,… но это очень нужно… раньше программил немного, но потом забросил… сейчас, приходиться вспоминать… пока буду осмысливать то, что вы дали,… если появятся вопросы,  то напишу…
Записан

Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines