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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.03.2022, 00:42   #321
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Цитата:
Сообщение от sergey.serg-72 Посмотреть сообщение
В этом и была суть задания.
По-моему, суть все-таки в обработке входного файла, а как именно она вызвана (2 кнопки; кнопка и чекбокс; 2 отдельных программы) - это мишура.
Цитата:
Сообщение от sergey.serg-72 Посмотреть сообщение
Это опять для одной кнопки и чекс бокса.
Нет, if позволяет менять поведение обработки. Можно из двух кнопок вызывать одну процедуру, передавая одним из параметров булево значение (в одном случае выполнять код в if, а в другом пропускать).
Цитата:
Сообщение от sergey.serg-72 Посмотреть сообщение
но диапазон какойто один должен быть, а не несколько
Не понял, почему один.
Цитата:
Сообщение от sergey.serg-72 Посмотреть сообщение
чтоб диапазон отличался от Батановского
Так и вбейте любые другие (главное, чтобы желаемый новый адрес диапазона не перекрывался с предыдущими).
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 16.03.2022, 04:57   #322
sergey.serg-72
Форумчанин
 
Регистрация: 12.03.2019
Сообщений: 376
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Не понял, почему один.
Расчёт на 2 кнопки , значит один диапазон просто чуть изменён и за место 000 читает данные, а на второй кнопке данные с 00000 идут.

Цитата:
Сообщение от BDA Посмотреть сообщение
Так и вбейте любые другие (главное, чтобы желаемый новый адрес диапазона не перекрывался с предыдущими).
Вообще как то не удобно , всё сподвывертом , как в начале было 1- начальный адрес с которого считываем, 2 конечный адрес считывания, 3 адрес на который записываем считанные данные, всё просто и понятно, а тут наоборот , почему так ?

Цитата:
Сообщение от BDA Посмотреть сообщение
По-моему, суть все-таки в обработке входного файла, а как именно она вызвана (2 кнопки; кнопка и чекбокс; 2 отдельных программы) - это мишура.
Да счекс боксом наверное удобней, просто давали задание на 2 кнопки все и делали так.

А потом я так и не разобрался с кодом как чекс бокс вставлять и новый кусок кода, не получилось у меня. Тяжело на 2 фронта соображать , я совсем запутался ....

Цитата:
Сообщение от BDA Посмотреть сообщение
Нет, if позволяет менять поведение обработки. Можно из двух кнопок вызывать одну процедуру, передавая одним из параметров булево значение (в одном случае выполнять код в if, а в другом пропускать).
Сделал так :
Код:
 const

sLineEnd = #13#10;
  BYTES_IN_LINE = 32;
  file_format = 's28';
  termination_line = 'S804000000FB' + sLineEnd;
  ranges: array[0..8] of array[0..2] of Int64 = (
    ($01870, $01870, $03FFF),
    ($020F0, $020F0, $07FFF),
    ($08000, $00000, $04000),
    ($0C000, $0C000, $10000),
    ($18000, $04000, $08000),
    ($28000, $08000, $0C000),
    ($38000, $0C000, $10000),
    ($48000, $10000, $14000),
    ($58000, $14000, $18000)
  );
var
  fbin, ftxt: TFileStream;
  s: string;
  b: TBytes;
  addr, range_end: Int64;
  i, j, read_count, saved_count, new_saved_count, first_read_range : Integer;
  last_byte: byte;
  fill_first_range_with_zeros : boolean;

begin
  fbin := nil;
  ftxt := nil;
  try
    try
       dlgOpen.Filter := 'Bin (*.Bin)|*.Bin;*.bin|';
      if not dlgOpen.Execute then
        exit;
      fbin := TFileStream.Create(dlgOpen.FileName, fmOpenRead or fmShareDenyWrite);
      dlgSave.Filter := Format('Motorola %s (*.%s)|*.%s|Motorola (*.srec; *.s)|*.srec; *.s', [UpperCase(file_format), file_format, file_format]);
      dlgSave.FileName := ChangeFileExt(dlgOpen.FileName, '.' + file_format);
      dlgSave.DefaultExt := file_format;
      if not dlgSave.Execute then
        exit;
      ftxt := TFileStream.Create(dlgSave.FileName, fmCreate or fmShareDenyWrite);
      SetLength(b, BYTES_IN_LINE);
      s := 'S00600004844521B' + sLineEnd;
      ftxt.Write(s[1], Length(s));

      if fill_first_range_with_zeros then
begin
  addr := ranges[0, 0];
  range_end := ranges[0, 2] - ranges[0, 1] + ranges[0, 0];
  while addr < range_end do
  begin
    new_saved_count := Min(BYTES_IN_LINE, range_end - addr);
    for i := saved_count to new_saved_count - 1 do
      b[i] := last_byte;
    saved_count := new_saved_count;
    if saved_count = BYTES_IN_LINE then
      write_to_stream(ftxt, addr, b, saved_count)
    else
      Break;
  end;
  first_read_range := 1;
end
else
  first_read_range := 0;
for j := first_read_range to High(ranges) do

begin
if (saved_count > 0) and (addr + saved_count <> ranges[j, 0]) then
write_to_stream(ftxt, addr, b, saved_count);
if saved_count = 0 then
addr := ranges[j, 0];
fbin.Position := ranges[j, 1];
range_end := ranges[j, 2] - ranges[j, 1] + ranges[j, 0];
while addr < range_end do
begin
read_count := fbin.Read(b[saved_count], Min(BYTES_IN_LINE - saved_count, range_end - addr));
Inc(saved_count, read_count);
if read_count > 0 then
begin
last_byte := b[saved_count - 1];
if saved_count < BYTES_IN_LINE then
Break;
end
else
Break;
write_to_stream(ftxt, addr, b, saved_count);
end;

while addr < range_end do
begin
new_saved_count := Min(BYTES_IN_LINE, range_end - addr);
for i := saved_count to new_saved_count - 1 do

b[i] := last_byte;
saved_count := new_saved_count;
if saved_count = BYTES_IN_LINE then
write_to_stream(ftxt, addr, b, saved_count)
else

Break;
  end;
  end;

if saved_count > 0 then
write_to_stream(ftxt, addr, b, saved_count);
ftxt.Write(termination_line[1], Length(termination_line));
s := 'Ôàéë óñïåøíî ïðåîáðàçîâàí è çàïèñàí.';
Application.MessageBox(PAnsiChar(s), 'Converter', MB_OK + MB_ICONINFORMATION);
    except
      on E : Exception do
        Application.MessageBox(PAnsiChar(E.Message), 'Converter', MB_OK + MB_ICONERROR);
    end;
  finally
    fbin.Free;
    ftxt.Free;
  end;
end;
Вроде читает и записывает на заданный адрес.
И всё вроде как надо, но ошибка где то, не могу понять где и в чём, пишет в файле после шапки

S00600004844521B' второй строкой идёт не понятно откуда вот это :S20710000000000000E000000EA
И файл не открывается в редакторе, убираю в блокноте эту строку , всё открывается.
Я не пойму откуда она записывается и почему ? ломает файл.

С чекс-боксом не получилось. Получилось на вторую кнопку но вот откуда эта строка прописывается в файл и ломает его?
Файл прилагаю.
Вложения
Тип файла: rar Тестовый - который надо преобразовать.rar (54.4 Кб, 1 просмотров)

Последний раз редактировалось BDA; 16.03.2022 в 19:39.
sergey.serg-72 вне форума Ответить с цитированием
Старый 16.03.2022, 19:38   #323
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Цитата:
Сообщение от sergey.serg-72 Посмотреть сообщение
всё просто и понятно, а тут наоборот , почему так ?
Потому что важно чтобы новый адрес строго возрастал. Когда новый адрес записан на первом месте, за этим легче следить.
Цитата:
Сообщение от sergey.serg-72 Посмотреть сообщение
второй строкой идёт не понятно откуда вот это
Предположу, что из-за того, что потеряли перед if:
Код:
      saved_count := 0;
      last_byte := 0;
Да и fill_first_range_with_zeros тоже нужно задать что-нибудь (True или False), раз не чекбокс используется.
Цитата:
Сообщение от sergey.serg-72 Посмотреть сообщение
($01870, $01870, $03FFF),
($020F0, $020F0, $07FFF),
Про адреса - конечный адрес сейчас не включается, так что не 7FFF, а 8000 (если нет именно желания выбросить последний байт из строки). Ну и у вас сейчас первый диапазон со вторым пересекаются (в выходном файле адрес 20F0, например, два раза).
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 16.03.2022, 21:50   #324
sergey.serg-72
Форумчанин
 
Регистрация: 12.03.2019
Сообщений: 376
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Предположу, что из-за того, что потеряли перед if:
Код:
saved_count := 0;
last_byte := 0;
Точно , в десятку Вы как всегда правы !

Цитата:
Сообщение от BDA Посмотреть сообщение
Да и fill_first_range_with_zeros тоже нужно задать что-нибудь (True или False), раз не чекбокс используется.
Это типа так ? :
Код:
      saved_count := 0;
      last_byte := 0;
      fill_first_range_with_zeros:= false; 
      if fill_first_range_with_zeros then
Цитата:
Сообщение от BDA Посмотреть сообщение
Про адреса - конечный адрес сейчас не включается, так что не 7FFF, а 8000 (если нет именно желания выбросить последний байт из строки). Ну и у вас сейчас первый диапазон со вторым пересекаются (в выходном файле адрес 20F0, например, два раза).
Да, тут не только последний байт обрезается, так ещё за место 6Е, 29 идёт заполнением.

Вот, Батан дал второй диапазон , его прога делает корректно, а моя обрезает последний байт, заполнение у меня 29 (что неправильно) а у него 6Е, что верно. При сравнении один байт не совпадает. Всё сделал по его диапазонам, но опять различия.
Я вроде правильно диапазоны выставил. Но не совпадения .

Вот пожалуйста, в архиве файлы наш и его. В чём опять ошибся я ?
Все данные вроде совпадают, кроме одного байта , последний байт обрезается и заполнение у меня 29, что неправильно. А так всё правильно. Значит диапазоны правильно выставил.
Но ошибка.

Код:
const

sLineEnd = #13#10;
  BYTES_IN_LINE = 32;
  file_format = 's28';
  termination_line = 'S804000000FB' + sLineEnd;
  ranges: array[0..11] of array[0..2] of Int64 = (
    ($0020F0 , $020F0, $7FFF),
    ($04000 , $04000 ,$07FFF),
    ($8000 , $0 , $03FFF),
        ($0C000, $0C000 ,$010000  ),
        ($010000 , $010000 ,$03FFF ),
        ($018000  , $04000 ,$07FFF ),
        ($28000, $08000 , $0C000),
        ($038000 , $0C000  , $0FFFF),
        ($48000, $010000,  $013FFF ),
        ($58000 , $14000 , $17FFF),
       ($68000, $18000, $01BFFF),
       ($78000, $01C000, $01FFFF)
  );
var
  fbin, ftxt: TFileStream;
  s: string;
  b: TBytes;
  addr, range_end: Int64;
  i, j, read_count, saved_count, new_saved_count, first_read_range : Integer;
  last_byte: byte;
  fill_first_range_with_zeros : boolean;

begin
  fbin := nil;
  ftxt := nil;
  try
    try
       dlgOpen.Filter := 'Bin (*.Bin)|*.Bin;*.bin|';
      if not dlgOpen.Execute then
        exit;
      fbin := TFileStream.Create(dlgOpen.FileName, fmOpenRead or fmShareDenyWrite);
      dlgSave.Filter := Format('Motorola %s (*.%s)|*.%s|Motorola (*.srec; *.s)|*.srec; *.s', [UpperCase(file_format), file_format, file_format]);
      dlgSave.FileName := ChangeFileExt(dlgOpen.FileName, '.' + file_format);
      dlgSave.DefaultExt := file_format;
      if not dlgSave.Execute then
        exit;
      ftxt := TFileStream.Create(dlgSave.FileName, fmCreate or fmShareDenyWrite);
      SetLength(b, BYTES_IN_LINE);
      s := 'S00600004844521B' + sLineEnd;
      ftxt.Write(s[1], Length(s));
       saved_count := 0;
      last_byte := 0;
      fill_first_range_with_zeros:= false; 
      if fill_first_range_with_zeros then
begin
  addr := ranges[0, 0];
  range_end := ranges[0, 2] - ranges[0, 1] + ranges[0, 0];
  while addr < range_end do
  begin
    new_saved_count := Min(BYTES_IN_LINE, range_end - addr);
    for i := saved_count to new_saved_count - 1 do
      b[i] := last_byte;
    saved_count := new_saved_count;
    if saved_count = BYTES_IN_LINE then
      write_to_stream(ftxt, addr, b, saved_count)
    else
      Break;
  end;
  first_read_range := 1;
end
else
 first_read_range := 0;
for j := first_read_range to High(ranges) do

begin
if (saved_count > 0) and (addr + saved_count <> ranges[j, 0]) then
write_to_stream(ftxt, addr, b, saved_count);
if saved_count = 0 then
addr := ranges[j, 0];
fbin.Position := ranges[j, 1];
range_end := ranges[j, 2] - ranges[j, 1] + ranges[j, 0];
while addr < range_end do
begin
read_count := fbin.Read(b[saved_count], Min(BYTES_IN_LINE - saved_count, range_end - addr));
Inc(saved_count, read_count);
if read_count > 0 then
begin
last_byte := b[saved_count - 1];
if saved_count < BYTES_IN_LINE then
Break;
end
else
Break;
write_to_stream(ftxt, addr, b, saved_count);
end;

while addr < range_end do
begin
new_saved_count := Min(BYTES_IN_LINE, range_end - addr);
for i := saved_count to new_saved_count - 1 do

b[i] := last_byte;
saved_count := new_saved_count;
if saved_count = BYTES_IN_LINE then
write_to_stream(ftxt, addr, b, saved_count)
else

Break;
  end;
  end;

if saved_count > 0 then
write_to_stream(ftxt, addr, b, saved_count);
ftxt.Write(termination_line[1], Length(termination_line));
s := 'Файл успешно преобразован и записан.';
Application.MessageBox(PAnsiChar(s), 'Converter', MB_OK + MB_ICONINFORMATION);
    except
      on E : Exception do
        Application.MessageBox(PAnsiChar(E.Message), 'Converter', MB_OK + MB_ICONERROR);
    end;
  finally
    fbin.Free;
    ftxt.Free;
  end;
end;

файлы в архиве его и мой .
Вложения
Тип файла: rar Тестовые файлы.rar (145.7 Кб, 1 просмотров)

Последний раз редактировалось BDA; 16.03.2022 в 23:35.
sergey.serg-72 вне форума Ответить с цитированием
Старый 16.03.2022, 23:33   #325
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Цитата:
Сообщение от sergey.serg-72 Посмотреть сообщение
Это типа так ?
Да, а можно сделать так, пока это не аргумент процедуры:
Код:
const
  fill_first_range_with_zeros = False;
Цитата:
Сообщение от sergey.serg-72 Посмотреть сообщение
кроме одного байта , последний байт обрезается
Потому что конечный адрес не входит в диапазон. Если диапазон [0, 2), то будут считаны только адреса 0 и 1, а 2 не будет. Чтобы файлы совпали, нужны диапазоны:
Код:
  ranges: array[0..9] of array[0..2] of Int64 = (
    ($020F0, $020F0, $08000),
    ($08000, $00000, $04000),
    ($0C000, $0C000, $10000),
    ($18000, $04000, $08000),
    ($28000, $08000, $0C000),
    ($38000, $0C000, $10000),
    ($48000, $10000, $14000),
    ($58000, $14000, $18000),
    ($68000, $18000, $1C000),
    ($78000, $1C000, $20000)
  );
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 17.03.2022, 01:55   #326
sergey.serg-72
Форумчанин
 
Регистрация: 12.03.2019
Сообщений: 376
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Потому что конечный адрес не входит в диапазон. Если диапазон [0, 2), то будут считаны только адреса 0 и 1, а 2 не будет. Чтобы файлы совпали, нужны диапазоны:
Код:
ranges: array[0..9] of array[0..2] of Int64 = (
($020F0, $020F0, $08000),
($08000, $00000, $04000),
($0C000, $0C000, $10000),
($18000, $04000, $08000),
($28000, $08000, $0C000),
($38000, $0C000, $10000),
($48000, $10000, $14000),
($58000, $14000, $18000),
($68000, $18000, $1C000),
($78000, $1C000, $20000)
);
В 10 - ку BDA, Вы как всегда правы !!!! надо прибавлять единицу в диапазоне к данным.
Супер теперь !
Блин жалко что с этой темой пролетел тогда. Сейчас бы полный был зачёт. Обидно , до кончика хвоста....

А главное завтра сдавать следующие темы по вставки s19 в bin и s19 в s19.
Времени убил кучу, но так и не вышло с новыми темами, пролетел как фанера над Парижем опять..... Батан скинет сегодня готовый s19 в s19, но там код как поэма война и мир, но хоть так, хотябы одно задание из двух завтра сдам.
А вот bin в s19 полный пролёт, даже у батана трудности ещё сидит над кодом.
Вы правы были , там всё сложней выходит.
sergey.serg-72 вне форума Ответить с цитированием
Старый 17.03.2022, 02:02   #327
sergey.serg-72
Форумчанин
 
Регистрация: 12.03.2019
Сообщений: 376
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
По-моему, суть все-таки в обработке входного файла, а как именно она вызвана (2 кнопки; кнопка и чекбокс; 2 отдельных программы) - это мишура.
Всё сделал теперь и вариант, чтоб считывала данные с адреса 1870, без 000 заполнения.
Всё получилось .
Код:
 const
sLineEnd = #13#10;
BYTES_IN_LINE = 32;
file_format = 's28';
termination_line = 'S804000000FB' + sLineEnd;
ranges: array[0..8] of array[0..2] of Int64 = (
($01870, $01870, $03FFF),
($020F0, $020F0, $08000),
($08000, $00000, $04000),
($0C000, $0C000, $10000),
($18000, $04000, $08000),
($28000, $08000, $0C000),
($38000, $0C000, $10000),
($48000, $10000, $14000),
($58000, $14000, $18000)
  );
var
  fbin, ftxt: TFileStream;
  s: string;
  b: TBytes;
  addr, range_end: Int64;
  i, j, read_count, saved_count, new_saved_count, first_read_range : Integer;
  last_byte: byte;
  fill_first_range_with_zeros : boolean;

begin
  fbin := nil;
  ftxt := nil;
  try
    try
dlgOpen.Filter := 'Bin (*.Bin)|*.Bin;*.bin|';
if not dlgOpen.Execute then
exit;
fbin := TFileStream.Create(dlgOpen.FileName, fmOpenRead or fmShareDenyWrite);
dlgSave.Filter := Format('Motorola %s (*.%s)|*.%s|Motorola (*.srec; *.s)|*.srec; *.s', [UpperCase(file_format), file_format, file_format]);
dlgSave.FileName := ChangeFileExt(dlgOpen.FileName, '.' + file_format);
dlgSave.DefaultExt := file_format;
if not dlgSave.Execute then
exit;
ftxt := TFileStream.Create(dlgSave.FileName, fmCreate or fmShareDenyWrite);
SetLength(b, BYTES_IN_LINE);
s := 'S00600004844521B' + sLineEnd;
ftxt.Write(s[1], Length(s));
saved_count := 0;
last_byte := 0;
if fill_first_range_with_zeros then
begin
addr := ranges[0, 0];
range_end := ranges[0, 2] - ranges[0, 1] + ranges[0, 0];
 while addr < range_end do
 begin
 new_saved_count := Min(BYTES_IN_LINE, range_end - addr);
 for i := saved_count to new_saved_count - 1 do
  b[i] := last_byte;
 saved_count := new_saved_count;
 if saved_count = BYTES_IN_LINE then
 write_to_stream(ftxt, addr, b, saved_count)
 else
 Break;
  end;
 first_read_range := 1;
end
else
first_read_range := 0;
for j := first_read_range to High(ranges) do

begin
if (saved_count > 0) and (addr + saved_count <> ranges[j, 0]) then
write_to_stream(ftxt, addr, b, saved_count);
if saved_count = 0 then
addr := ranges[j, 0];
fbin.Position := ranges[j, 1];
range_end := ranges[j, 2] - ranges[j, 1] + ranges[j, 0];
while addr < range_end do
begin
read_count := fbin.Read(b[saved_count], Min(BYTES_IN_LINE - saved_count, range_end - addr));
Inc(saved_count, read_count);
if read_count > 0 then
begin
last_byte := b[saved_count - 1];
if saved_count < BYTES_IN_LINE then
Break;
end
else
Break;
write_to_stream(ftxt, addr, b, saved_count);
end;
while addr < range_end do
begin
new_saved_count := Min(BYTES_IN_LINE, range_end - addr);
for i := saved_count to new_saved_count - 1 do
b[i] := last_byte;
saved_count := new_saved_count;
if saved_count = BYTES_IN_LINE then
write_to_stream(ftxt, addr, b, saved_count)
else
Break;
end;
end;
if saved_count > 0 then
write_to_stream(ftxt, addr, b, saved_count);
ftxt.Write(termination_line[1], Length(termination_line));
s := 'Oaee oniaoii i?aia?aciaai e caienai.';
Application.MessageBox(PAnsiChar(s), 'Converter', MB_OK + MB_ICONINFORMATION);
except
on E : Exception do
Application.MessageBox(PAnsiChar(E.Message), 'Converter', MB_OK + MB_ICONERROR);
end;
finally
fbin.Free;
ftxt.Free;
end;
end;
Вот исправил и всё получилось, теперь и с 00 заполнением и с данными.
Всё вроде отлично получилось.

Хотя согласен что с чекс-боксом солидней бы было.

Но пока не смог объединить чтоб в одном коде .
Диапазона получается 2 надо использовать .
sergey.serg-72 вне форума Ответить с цитированием
Старый 17.03.2022, 06:58   #328
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Цитата:
Сообщение от sergey.serg-72 Посмотреть сообщение
($01870, $01870, $03FFF),
($020F0, $020F0, $08000),
Только опять итоговые адреса первого и второго диапазонов пересекаются.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 17.03.2022, 23:07   #329
sergey.serg-72
Форумчанин
 
Регистрация: 12.03.2019
Сообщений: 376
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
($01870, $01870, $03FFF),
($020F0, $020F0, $08000),
Только опять итоговые адреса первого и второго диапазонов пересекаются.
Да, Вы правы, исправил:
Код:
($01870, $01870, $4000),
($020F0, $020F0, $08000),
sergey.serg-72 вне форума Ответить с цитированием
Старый 17.03.2022, 23:42   #330
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Цитата:
Сообщение от sergey.serg-72 Посмотреть сообщение
исправил
Нет, это исправление о включении/невключении последнего байта диапазона. А тут есть общие адреса в итоговых диапазонах. Я не знаю, насколько это важно программаторам и преподавателю, но сейчас в выходном файле существуют адреса, для которых данные указаны несколько раз (например, адрес 20F0).
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Ответ


Купить рекламу на форуме - 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