Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.03.2021, 21:57   #11
sergey.serg-72
Форумчанин
 
Регистрация: 12.03.2019
Сообщений: 376
По умолчанию

Цитата:
Сообщение от digitalis Посмотреть сообщение
Тип результата функции format - string. Как это и было описано (но не понято ) в материале по ссылке.
Вы сами поняли что написали ? я лично нет ....
Большая просьба к тем, кто комментирует , словоблудием занимаясь, помочь не можете проходите мимо пожалуйста, или так баллы набираем , не важно что ответил, главное что ни будь брякнуть в теме и себя показать ?
Спасибо не надо лучше мимо пройдите.
Я создал тему и в теме попросил показать наглядно как можно решить задачу, в место этого, не рабочий код один даёт и отсылает по ссылке, второй его комментирует.
Ребята , если не можете лучше пройдите мимо, самоутверждайтесь в других темах пожалуйста.

Тему закрываю на этом ресурсе, за без перспективностью решения .
Людей (профессионалов) , которые могли бы доходчиво объяснить и показать как решить задачу начинающему (с начальным уровнем) человеку , на этом ресурсе не оказалось.
Наверное одни профи тут мирового масштаба и мимо проходящие....
Всё, тема отмечаю как не решённая задача оказалась не под силу профи.

Последний раз редактировалось BDA; 11.03.2021 в 00:10.
sergey.serg-72 вне форума Ответить с цитированием
Старый 03.03.2021, 01:22   #12
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

Давайте-ка по порядку. То что выложили свой текущий код, ожидаемый и получаемый результаты это хорошо. То что не используете форматирование кода - плохо (и читать неприятно, и ошибки легче проглядеть).
Вот этот цикл вообще ничего полезного не делает:
Код:
for j:=0 to F.size do length(s);
Выкладывать текст с ошибками компилятора архивом совсем не круто. Тем более что без исходного кода описание ошибок ничего не дает. Лучше бы выложили сам проект архивом, чтобы можно было его просто открыть в IDE. Формат форума не подразумевает, что вам все разжуют и в рот положат. Вектор решения и сопутствующие вопросы выше в теме уже рассмотрели. Готовые решения обычно во фрилансе (ну кроме каких-то 100 раз решенных задач). Так и быть, выложу код (проверялся в Дельфи 7), раз потратил какое-то время на его отладку:
Код:
type
  TBytes = array of Byte;
const
  BYTES_IN_LINE = 16;
var
  fbin: TMemoryStream;
  ftxt: TMemoryStream;
  s: string;
  b: TBytes;
  i, count: integer;
begin
  fbin := TMemoryStream.Create;
  ftxt := TMemoryStream.Create;
  fbin.LoadFromFile('test-1.bin');
  SetLength(b, BYTES_IN_LINE);
  while fbin.Position < fbin.Size do
  begin
    s := Format('%.4x :', [fbin.Position]);
    count := fbin.Read(b[0], BYTES_IN_LINE);
    for i := 0 to count - 1 do
      s := s + ' ' + IntToHex(b[i], 2);
    s := s + sLineBreak;
    ftxt.Write(s[1], Length(s));
  end;
  ftxt.SaveToFile('test-1.txt');
  fbin.Free;
  ftxt.Free;
end;
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 03.03.2021 в 01:28.
BDA на форуме Ответить с цитированием
Старый 03.03.2021, 04:25   #13
Alar
Александр
Администратор
 
Аватар для Alar
 
Регистрация: 28.10.2006
Сообщений: 17,758
По умолчанию

Цитата:
Сообщение от sergey.serg-72 Посмотреть сообщение
на этом ресурсе
Много у вас в интернете "этих" ресурсов осталось?
Скоро выть будете, что вам подобным в тик токах не помогают вообще ничем, ни на один вопрос не отвечают )
Походите по ютубу - поспрашивайте, что у вас там не работает, да злой я ))

Короче, не нужно своё детское нытьё на взрослый ресурс переносить, который последний остался на программерскую тематику в рунете.
Alar вне форума Ответить с цитированием
Старый 03.03.2021, 16:18   #14
sergey.serg-72
Форумчанин
 
Регистрация: 12.03.2019
Сообщений: 376
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Давайте-ка по порядку. То что выложили свой текущий код, ожидаемый и получаемый результаты это хорошо. То что не используете форматирование кода - плохо (и читать неприятно, и ошибки легче проглядеть).
Вот этот цикл вообще ничего полезного не делает:
Код:
for j:=0 to F.size do length(s);
Выкладывать текст с ошибками компилятора архивом совсем не круто. Тем более что без исходного кода описание ошибок ничего не дает. Лучше бы выложили сам проект архивом, чтобы можно было его просто открыть в IDE. Формат форума не подразумевает, что вам все разжуют и в рот положат. Вектор решения и сопутствующие вопросы выше в теме уже рассмотрели. Готовые решения обычно во фрилансе (ну кроме каких-то 100 раз решенных задач). Так и быть, выложу код (проверялся в Дельфи 7), раз потратил какое-то время на его отладку:
Код:

BDA, в начале хочу поблагодарить Вас персонально, если бы Вы раньше в теме были я думаю, что в тот же день и решили бы.
Действительно оказалось всё не так страшно, но это когда подробно объяснили, а лучше показали на примере как Вы.
Всё разобрал по полочкам, каждое действие и стало понятно всё.
Теперь по порядку : Вы правы цикл мой совсем не нужен был
for j:=0 to F.size do length(s);

Всё таки свой Type //Определяет новую категорию переменной
или процесса

TBytes = array of Byte; // создаём тип данных в виде массива байт
Создать пришлось, а главное с помощью константы ,как сам процесс универсальным стал.
Лучшего урока чем Вы дали, уж точно не найти.
Сколько читать бы пришлось и главное где это прочитать , чтоб доходчивый пример был ?
Нет, по книжкам научится программировать нельзя всё таки и это факт !
Нет плохих учеников, есть плохие учителя и это тоже факт !!!

Всё получилось как нельзя отлично, благодаря BDA.
Код чуть изменил под нужды.
Код с описанием выкладываю поправьте, если где ошибся.
Проект ещё не готов , сегодня препод дополнил задачу, теперь надо пересчитать байты в строке
и в конец строки контрольную сумму записать, как в intelHEX, всё же думаю препод к этому плавно подводит.
Сейчас сижу изучаю, как пересчитать и контролку добавить, в конец строки, наверное функцию создавать надо..... Пока разбираюсь с новым заданием.
А эту задачу код выкладываю, код рабочий, проверен, всё супер получилось, благодаря BDA.
Как проект закончу, выложу, а пока дополнять приходится , сижу, голову ломаю, над новым заданием.
Вот код готовый :
И огромное спасибо BDA за лучший ответ и за конкретную помощь в теме !
Ваш ответ лучший !!!
Ещё раз благодарю Вас BDA !!!

Код:
 Type  //Определяет новую категорию переменной
 или процесса
 
TBytes = array of Byte;  //  создаём тип данных в виде массива байт 





const  // объявляем константу   //используется для начала раздела постоянных определений. 
BYTES_IN_LINE = 16;

var
fbin: TMemoryStream;  // класс  обеспечивает сохранение данных в адресном пространстве. 
ftxt: TMemoryStream;  // при работе с файловыми потоками.
s: string;
b: TBytes;
i, count: integer;
begin
dlgOpen1.Filter := ' (*.bin)|*.bin';
if dlgOpen1.Execute then // загружаем файл bin
begin
fbin := TMemoryStream.Create; // создаём объект в памяти 
ftxt := TMemoryStream.Create;
fbin.LoadFromFile(dlgOpen1.FileName); //   загружаемый  файл  читаем  
SetLength(b, BYTES_IN_LINE);  //SetLength изменяет размер строки,    // загружаем в массив константу и массив  типа byte
while fbin.Position < fbin.Size do //  циклом определяем  позицию начальный   адрес чтения данных из файла
begin
s := Format('%.8x :', [fbin.Position]);  // переменой s типа string присваиваем формат отображения адреса, позиции 
count := fbin.Read(b[0], BYTES_IN_LINE);  // читаем файл в массив по 16 байтв строке определено константой 
for i := 0 to count - 1 do   // через цикл читаем файл от начало и до конца 
s := s + ' ' + IntToHex(b[i], 2);  // переводим, конвертируем данные в HEX
s := s + sLineBreak;   //  константа sLineBreak  перенос строки 
ftxt.Write(s[1], Length(s));   // записываем массив данных в файл txt 
end;
begin
dlgsave1.Filter:= 'Txt File (*.Txt)|*.Txt';
dlgSave1.FileName :=dlgOpen1.FileName;//  при сохранении файла даём имя загруженого файла
if dlgSave1. Execute() then  // открываем окно сохранения файла и даём возможность сохранить в любую директорию
begin
ftxt.SaveToFile(dlgOpen1.FileName+'' + '.txt'); // сохраняем записанный файл .txt'
Application.MessageBox('txt_ файл записан  успешно.', 'Сообщение', MB_Ok + MB_ICONINFORMATION);
end;
end;
fbin.Free; // закрываем потоки 
ftxt.Free;
end;
end;
end.
sergey.serg-72 вне форума Ответить с цитированием
Старый 03.03.2021, 16:45   #15
sergey.serg-72
Форумчанин
 
Регистрация: 12.03.2019
Сообщений: 376
По умолчанию

Цитата:
Сообщение от Alar Посмотреть сообщение
Много у вас в интернете "этих" ресурсов осталось?
Скоро выть будете, что вам подобным в тик токах не помогают вообще ничем, ни на один вопрос не отвечают )
Походите по ютубу - поспрашивайте, что у вас там не работает, да злой я ))

Короче, не нужно своё детское нытьё на взрослый ресурс переносить, который последний остался на программерскую тематику в рунете.
Кризис? нет работы? ну окей, буду чай пи
Alar, ресурсов то много в интернете, хороших специалистов , умеющих объяснить, показать, чтоб понятно было, тут Вы правы , таких мало, если бы на ресурсах, такие как BDA были, я думаю что обезьян можно было научить программированию...
Сами посудите, вот весь нюанс, человек даёт код, который не проверял, в коде не понятно откуда взялись a и r человек на вопрос конкретно не ответил. Но код не верный, я всю ночь голову ломал, а код не рабочий, выдумка, без объяснения так по вашему можно помогать человеку, начинающему в программировании?
В том то и вопрос, не можешь, не хочешь лучше мимо пройди, не вводи, в заблуждение, если свой код, не можешь объяснить. Про формат я прочитал, только понял всё , после того как разбирал по полочкам код BDA, тогда всё понял и уяснил. Но только, благодаря BDA и его помощи.
Сейчас новое задание, пока пробую сам , не знаю получится, или нет, но пробую.
Я за то, что бы новичкам и лузерам как я , помогали такие как BDA.
Всё понятно и наглядно.

sergey.serg-72,
Последний штришок, остался и прошу Вашей помощи, для окончательного завершения темы.
Это подсчитать контрольную сумму строки и записать в конец строки.
Перелапатил кучу материала и понял, что для этого надо создавать функцию и эту функцию встраивать в поток обработки, или делать дополнительным циклом ?
Функцию с помощью интернета удалось написать, но правда не знаю правильная, или нет.
И второй момент как функцию встроить в имеющийся уже код?
Что то не получается ни как, если возможно объясните пожалуйста как лучше встроить функцию в код , может BDA покажет, буду признателен.
Вот функция :
Код:
 function CalcSum(d:pointer;Len:Integer):Integer;
Var    
p   : Pchar;
j  : Integer;
Sum : Integer;
begin
p:=pchar(d);
Sum:=0;
 for j:=0 to (len-1) do
 Sum:=Sum+ ord( p[j] );
 CalcSum:=Sum;
end;

Последний раз редактировалось BDA; 14.03.2021 в 06:34.
sergey.serg-72 вне форума Ответить с цитированием
Старый 03.03.2021, 19:43   #16
Alar
Александр
Администратор
 
Аватар для Alar
 
Регистрация: 28.10.2006
Сообщений: 17,758
По умолчанию

sergey.serg-72, у вас столько слов как буд-то вы из министерства образования, и выбираете кому сто миллиардов рублей финансирования выделить.

А во факту форум даже с оплаты сервера платит НДС, и финансирует ваше образование.

А форумчане здесь просто хотят хорошо провести время, пообщаться, а не оскорбления читать.

Меняйте свой подход к жизни, на уважительный к специалистам, которых походу нет в вашем образовательном учреждении, которые вас даже культуре общения обучить не могут. Т.е. это даже на уровне школы полная деградация, в семье никакой культуры нет и т.д.

Санкт-Петербург, всё больше не объясняйте, культурная столица все дела... знаем, понимаем.
Alar вне форума Ответить с цитированием
Старый 04.03.2021, 03:13   #17
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

Во-первых, зря вы потеряли всё форматирование кода (код в 18 сообщении). Например, там есть лишняя пара begin и end (не влияет на работоспособность). Во-вторых, по поводу помощи и обучения. Эта задача не может рассматриваться как самая первая обучающая (когда только начинают обучаться программированию, изучают синтаксис на конкретных примерах и решают задачи, изменяя готовые примеры). Поэтому предполагается, что у вас уже имеется некий багаж знаний. А нерабочий код (с точки зрения компилятора) можно расценивать просто как пример решения на псевдоязыке. Мой код не появился из ниоткуда, а опирался на ваш код и все ранее приведенные ответы. Пришлось немного его поотлаживать из-за возникающих ошибок (плотно не использую дельфи, поэтому некоторые нюансы забываются) и поискать подходящие функции. Просто ответы предполагали, что этим вы займетесь сами. Тестирование и отладка кода более важные этапы, чем написание. Не считаю готовый код помощью, это, скорее, медвежья услуга.
Теперь по поводу контрольной суммы. Не вижу особого смысла в отдельной функции. Посмотрите внимательно на код в 18 сообщении и код функции CalcSum и найдите одинаковый цикл. Необходимые изменения в коде 18 сообщения:
Завести переменную типа Byte;
Обнулить её перед циклом (найденный ранее);
Затем дополнить тело цикла операторными скобками begin и end;
Дописать одну строчку в тело цикла (подсчет суммы);
Изменить одну строчку ниже цикла (добавив тем самым печать суммы в файл).
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 04.03.2021, 09:03   #18
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

Цитата:
Код:
if dlgSave1. Execute() then  // открываем окно сохранения файла и даём возможность сохранить в любую директорию
begin
ftxt.SaveToFile(dlgOpen1.FileName+'' + '.txt'); // сохраняем записанный файл .txt'
Application.MessageBox('txt_ файл записан  успешно.', 'Сообщение', MB_Ok + MB_ICONINFORMATION);
НО вероятно совсем не туда куда было указано.
почему?
да потому что использованы РАЗНЫЕ объекты для выбора куда и реального сохранения.
программа — запись алгоритма на языке понятном транслятору
evg_m на форуме Ответить с цитированием
Старый 04.03.2021, 18:42   #19
sergey.serg-72
Форумчанин
 
Регистрация: 12.03.2019
Сообщений: 376
По умолчанию

Цитата:
Сообщение от Alar Посмотреть сообщение
А форумчане здесь просто хотят хорошо провести время, пообщаться, а не оскорбления читать.
Вы меня конечно извините, а где оскорбления ?, я кого то обозвал не хорошим словом каким, плюнул в чашку с чаем?
Время хорошо провести , это конечно хорошо и по общаться кто же спорит ?

Цитата:
Сообщение от evg_m Посмотреть сообщение
НО вероятно совсем не туда куда было указано.
почему?
да потому что использованы РАЗНЫЕ объекты для выбора куда и реального сохранения.
Изначально задача стояла взял файл, bin, считал данные из файла , записал в файл тхт и сохранил, куда захотел пользователь, хоть на другой диск, а указано для примера....Выбор должен быть у пользователя, я лично не люблю сохранять в туже папку, или диск, многие тоже.

BDA,
Цитата:
Сообщение от BDA Посмотреть сообщение
Теперь по поводу контрольной суммы. Не вижу особого смысла в отдельной функции. Посмотрите внимательно на код в 18 сообщении и код функции CalcSum и найдите одинаковый цикл. Необходимые изменения в коде 18 сообщения:
Завести переменную типа Byte;
Обнулить её перед циклом (найденный ранее);
Затем дополнить тело цикла операторными скобками begin и end;
Дописать одну строчку в тело цикла (подсчет суммы);
Изменить одну строчку ниже цикла (добавив тем самым печать суммы в файл).
Что касается начальных навыков, тут Вы правы, но заниматься программированием приходится редко и то , для зачёта. Это не основной предмет, а спец-предмет занимает много времени и сил и не всегда есть время для программирования, а навыки быстро забываются,когда от случая, к случаю... А предметы выбирать тоже не студенты решают....
А хороший пример, это и есть обучение, не всегда есть время тома читать по программированию и не всегда там конкретика есть. А чтоб накидать прожку, читать тома Война и мир, не всегда есть время и силы.

что касается этого :
Теперь по поводу контрольной суммы. Не вижу особого смысла
в отдельной функции.
Посмотрите внимательно на код в 18 сообщении и код функции
CalcSum и найдите одинаковый цикл. Необходимые изменения
в коде 18 сообщения:
Завести переменную типа Byte;
Обнулить её перед циклом (найденный ранее);
Затем дополнить тело цикла операторными скобками begin и end;
Дописать одну строчку в тело цикла (подсчет суммы);
Изменить одну строчку ниже цикла (добавив тем самым печать
суммы в файл).

Пробывал и так и этак, не получается , видимо что то не допонимаю, но цикл не выходит.
Либо, всё же надо использовать функцию и без этого ни как.
Сейчас пробую с функцией варианты.
p/s
Сегодня башка гудит адски, погода видимо.....

Последний раз редактировалось BDA; 14.03.2021 в 06:35.
sergey.serg-72 вне форума Ответить с цитированием
Старый 05.03.2021, 09:35   #20
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

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

при сохранении выбрать другую папку.
кроме этого задать другое имя (желательно несуществующее)
и потом найдите в той папке(которую выбирали) такой файл как задавали.
а файл результата который лежит рядом с исходным удалите до запуска программы (на всякий случай).
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 05.03.2021 в 09:37.
evg_m на форуме Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужно создать "батник", вырезать из "2.txt" первых n строк и вставить их в "1.txt" temphard Помощь студентам 2 03.09.2013 16:03
Удаление первых n-строк из txt-файла Neksion Помощь студентам 2 10.07.2013 18:12
Создать чтение из файла и запись в файл txt на С++ skifre Фриланс 0 01.06.2012 16:16
поиск и выципление строк из txt файла D_e_n_n Помощь студентам 7 04.02.2011 05:39
C# Представление txt файла как массива строк asheb Помощь студентам 7 20.04.2010 12:51