Конференция "Сети" » Передача записи (Record) с данными посети (Indy)
 
  • Archangel_x (06.06.11 09:32) [0]
    Добрый день
    Помогите решить таккую задачу: Необходимо передать по сети (IdTCPClient/IdTCPServer) запись с данными типа

    TResultArray = array of array of String;

    TResultData = Record
     IDClient : string[50];
     IDCmd    : string[50];
     StatCmd  : string[50];
     DeepArr  : string[10];
     DataArray: TResultArray;
    end;

    Подскажите как это можно сделать, заранее благодарен.
  • sniknik © (06.06.11 11:49) [1]
    > как это можно сделать
    для начала преобразовать динамический массив TResultArray во что то более удобоваримое в одномерный массив например, и не указателем, а чтобы "пристыковывался", например -

    TResultData = Record
     IDClient : string[50];
     IDCmd    : string[50];
     StatCmd  : string[50];
     DeepArr  : string[10];
     DataLen: integer;
     DataArray: array[0..0] of char; //или DataArray: array[word] of char; другая крайность...
    end;
    но в любом случае за выделением памяти/превышением границ придется следить самому
  • Anatoly Podgoretsky © (06.06.11 12:22) [2]
    Передавать указатели бессмысленно.
  • Dennis I. Komarov © (06.06.11 13:13) [3]

    > TResultData = Record  IDClient : string[50];  IDCmd    :
    >  string[50];  StatCmd  : string[50];  DeepArr  : string[10];
    >   DataArray: TResultArray; end;

    ИМХО, бред...
  • FireMan_Alexey © (06.06.11 13:50) [4]
    По логике создай запись типа:

    PodMassiv=Record
     Index:cardinal;//здесь по выбору!!!
     Data:String;
    End;

    В индекс указываешь индекс 1-го массива строк, потом 2-го и т.д.
    А на принимающей стороне создаешь по приходу данных заново такой же массив!
    Только не забудь указывать длину пересылаемой строки!!!

    Да и еще проще бы было, указать чего передавать собираешься, может все можно было-бы на много проще придумать... ;)
  • Anatoly Podgoretsky © (06.06.11 14:00) [5]
    > FireMan_Alexey  (06.06.2011 13:50:04)  [4]

    Data такой же указатель.
  • sniknik © (06.06.11 14:57) [6]
    > Да и еще проще бы было, указать чего передавать собираешься, может все можно было-бы на много проще придумать... ;)
    но было бы не так интересно...

    > ИМХО, бред...
    не совсем бред, рекорд иногда удобен, просто у него непонимание что такое указатель...
    но тут было бы конечно проще если всю структуру представить 1 строкой с каким нибудь разделителем (например #13#10) тогда бы и переменная длинна была, и следить за ней не нужно было. просто с одной стороны "разложил" с другой "сложил" по разделителям, и все (а взять стринглист так и "раскладка/складка" автоматизируется).
  • Dennis I. Komarov © (07.06.11 09:01) [7]

    > не совсем бред, рекорд иногда удобен, просто у него непонимание
    > что такое указатель...

    А я не про рекорд, я про то, что внутри, т.е. непосредственно про этот рекорд
  • sniknik © (07.06.11 12:10) [8]
    > я про то, что внутри
    внутри все нормально, кроме последнего указателя.
  • clickmaker © (07.06.11 12:20) [9]
    > но тут было бы конечно проще если всю структуру представить
    > 1 строкой с каким нибудь разделителем (например #13#10)

    да и рекорд нормально. Парсить ничего не надо
  • Dennis I. Komarov © (07.06.11 12:26) [10]
    > IDClient : string[50]

    Правда ID на 50 чаров?
  • sniknik © (07.06.11 12:38) [11]
    > Парсить ничего не надо
    строку тоже, если в стринглист, только что адресоваться по позиционно придется а не именовано, не всем/всегда удобно.

    > Правда ID на 50 чаров?
    вполне. все от специфики зависит. и больше были.
  • clickmaker © (07.06.11 12:43) [12]
    > ID на 50 чаров

    сильно уникальный клиент )
  • sniknik © (07.06.11 12:47) [13]
    > и больше были.
    к примеру был составной идентификатор определяющий "офис + магазин + отдел + касса + смена + чек + позиция", кто то когда то выбрал гуиды (вроде для репликации чтобы части друг от друга не зависели),  гуид в строке (именно так передает программа) = 36 символов + символ разделителя ";" (х.з. зачем, может из csv выгрузки берут).
    посчитай сам какая длинна получается.

    большего не было...
  • Dennis I. Komarov © (07.06.11 13:00) [14]

    > сильно уникальный клиент )

    и не только клиент уникальный...

    > вполне. все от специфики зависит. и больше были.

    верю что может, но не верю что здесь...
  • Dennis I. Komarov © (07.06.11 13:22) [15]

    > sniknik ©   (07.06.11 12:47) [13]

    Логично продолжить:
    > IDCmd    : string[50];

    что-то вроде "kassir_poshel_na_obed_kassa_ne_rabotaet"
  • Archangel_x (28.06.11 13:37) [16]

    > > IDClient : string[50]Правда ID на 50 чаров?


    Нет, это тестовый код.
  • Archangel_x (28.06.11 13:49) [17]
    Основная задача была передать указанные данные, мне показалось что в такой организации данных хранить их удобнее, если есть более удобные варианты для передачи то подскажите.

    Не понятна чем плоха сама Запись.

    TResultData = Record
     IDClient : string[50];
     IDCmd    : string[50];
     StatCmd  : string[50];
     DeepArr  : string[10];
     DataArray: array of array of String;
    end;

    Применение: с сервера поступет команда клиенту с кодом комманды IDCmd, клиент обрабатывет команду, формирует данные с указанием кода клиента  IDClient , кода самой команды IDCmd, статуса StatCmd (Удачно-Неудачно), DeepArr - глубина массива полученных данных, и собственно сами полученные данные записанные в массив. И вот это все нужно передать.
  • Медвежонок Пятачок © (28.06.11 13:49) [18]
    я бы передавал не рекорды, а строку с xml.
    например стало мне мало string[50].
    сделал на клиенте стринг[255] и все.
    сервер остался как есть и принимает уже не 50 буков, а все 255.
  • FireMan_Alexey © (28.06.11 14:15) [19]
    >Медвежонок Пятачок ©
    Тут принцип, так чтобы всЁ/всЕ за тебя думало/и а ты запихнул запись с этой стороны и принял с той!
    Парсить никто не хочет!!!!

    >Archangel_x

    Еще раз по русски!
    0. Многомерный массив N на M =Одномерному массиву длиной N*M;
    1. Создаешь заголовок, можешь как у тебя со строками или с цифровыми значениями это уже твое дело!!!!!
    2. Добавляешь размерность массива перед отсылкой в заголовок!!!
    3. Посылаешь в начале длину строки элемента твоего массива, а затем за ней саму строку или формируешь массив в котором между твоих строк есть разделители типа #0 как в ASCIZ строках!
    4. С принимающей стороны получаешь заголовок!
    5. Формируешь свой дин. массив по размерности в заголовке
    6. Парсишь входные данные и заполняешь свой массив!!!!!!!!

    Увы без разбора, чего пришло тебе никак не написать этот код нормально!
  • Медвежонок Пятачок © (28.06.11 14:44) [20]
    парсить никому и не надо. парсит xml документ
  • Медвежонок Пятачок © (28.06.11 15:13) [21]
    Не понятна чем плоха сама Запись.


    тем плоха, что последнее поле придется передавать в несколько вызовов.
    и принимать в несколько вызовов.

    вместо одного единственного в случае xml.
  • sniknik © (28.06.11 15:17) [22]
    > Парсить никто не хочет!!!!
    так парсить xml и не нужно (противопоказано), для этого есть IDOMдокумент... а от "велосипедных парсеров" одни только проблемы.

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

    в общем не выдумывай сам себе "страшилок".
  • Медвежонок Пятачок © (28.06.11 15:27) [23]
    в общем убрать рекорд нафик и с сервера и с клиента.
    на клиенте сразу заполнять xml документ.
    передавать на сервер одним вызовом свойство xml
    на сервере принимать строку целиком и делать loadxml.

    а про весь этот онанизм с рекордами забыть.
  • b z (28.06.11 15:58) [24]
    json еще можно
  • Dennis I. Komarov © (29.06.11 13:37) [25]

    > статуса StatCmd (Удачно-Неудачно)

    И за каким вот 50 чаров тут, когда даже байта много?
  • han_malign (30.06.11 16:27) [26]
  • NEOSadist (24.05.12 11:08) [27]
    хммм... мне вот интересен сам механизм передачи в инди - можно пример кода с использованием индейцев, а то у меня тоже тут залет вышел изза сокетов. отказаться пришлось.
  • Сергей М. © (24.05.12 21:33) [28]

    > у меня тоже тут залет вышел изза сокетов


    Наверно не предохранялся ..
  • brother © (25.05.12 05:55) [29]
    презервативы отменили?
  • Дмитрий С © (25.05.12 12:30) [30]
    Странно что в теме слова rtti еще не прозвучало.
  • Труп Васи Доброго © (19.06.12 09:37) [31]
    Не слушай их, они плохому научат! Прасить, не парсить, XML, не XML... фигня всё! Сохрани запись в файл, заархивируй и отправь по почте! Работает 100%, проверено!
  • Труп Васи Доброго © (19.06.12 09:51) [32]

    > Передача записи (Record) с данными посети

    Да и вообще что это за "посеть" такая, ты у неё разрешение спрашивал чтобы её данные куда-то передавать? Или ты ей данные передать хочешь? А они ей нужны? Посеть она, капризная.
  • brother © (19.06.12 10:25) [33]
    некрофилы?
 
Конференция "Сети" » Передача записи (Record) с данными посети (Indy)
Есть новые Нет новых   [134435   +14][b:0][p:0.001]