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

Тема в разделе ".NET", создана пользователем FanatWin, 1 июн 2009.

  1. FanatWin

    FanatWin Гость

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

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

    [codebox]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==0x0A)
    {
    Count0A++;
    if (Count0A > 6)
    {
    i++;
    }
    }
    if (ByteArray == 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 == 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== 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));

    }
    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;
    }[/codebox]

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

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

    Плиз… кому не трудно помогите…

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

Поделиться этой страницей