Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Работа со char массивом


programmer90 ©   (2008-12-02 16:28:00) 

Здравствуйте увадаемые мастера!
Возникла небольшая проблема
Даны два файла с массивом символов.
Найти первый различный символ  в файле.
Например файл1:
a7df3j20fn dws
Файл2
a7df3j20fn1dws
первый различный символ в файле1  находится на позиции (1,11)
(11-ый символ в файле 1 - " " , а в файле 11 символ  "1"...)
Плиз объясните подробно насколько это возможно...
Можно на pascal.
Спасибо всем!


Leonid Troyanovsky   (2008-12-02 18:51:00) [1]


> programmer90   (02.12.08 18:48) [11]

> ...я не знаю что такое TStream.... вот и немогу его использовать

TFileStream + F1.

--
Regards, LVT.


programmer90   (2008-12-02 18:48:00) [2]


> KilkennyCat ©   (02.12.08 17:57) [6]

Проклятый рантайм 103....

> Дополнить ее нахождением позиции отличного символа входит

Это понятно...
Параметры функции  не смог  подставить  и это понятно почему....я не знаю что такое TStream.... вот и немогу его использовать


Leonid Troyanovsky   (2008-12-02 18:12:00) [3]


> programmer90   (02.12.08 16:28)  

> Плиз объясните подробно насколько это возможно...

Специально для двоечников в свое время написал специальную функцию:

function CompareStreams(Stream1, Stream2: TStream): Boolean;
const
 BufSize = 4096;
var
 StreamSize: Int64;
 nb1, nb2: Cardinal;
 buf1, buf2: array [0..BufSize-1] of Byte;
begin
 StreamSize := Stream1.Size;
 Result := StreamSize = Stream2.Size;
 if not Result then
   Exit;
 while (Stream1.Position < StreamSize) do
   begin
     nb1 := Stream1.Read(buf1, BufSize);
     nb2 := Stream2.Read(buf2, BufSize);
     if nb1 <> nb2 then
       raise EReadError.Create('Compare error');
     Result := CompareMem(@buf1, @buf2, nb1);
     if not Result then
       Exit;
   end;
end;

Дополнить ее нахождением позиции отличного символа входит
в домашнее задание.

--
Regards, LVT.


KilkennyCat   (2008-12-02 18:07:00) [4]


> clickmaker ©

а потом преподаватель будет пить водку и плакать от счастья, что нашелся и в его толпе гений! :)


clickmaker   (2008-12-02 18:03:00) [5]

я бы замапил в память... но не весь, а кусок. Если куски одинаковые, то следующий кусок


KilkennyCat   (2008-12-02 17:58:00) [6]

ошибся, i := 0;


KilkennyCat   (2008-12-02 17:57:00) [7]

i := 1;
a := true;
while (not eof(f1)) or (not eof(f2)) or (not a) do begin
 read(f1, x);
 read(f2, y);
 a := x = y;
 inc(i);
end;

if not a then result := i else один файл закончился раньше (один из файлов - копия куска другого), или оба одинаковые


Правильный$Вася   (2008-12-02 17:43:00) [8]

strcmp


Slym   (2008-12-02 17:41:00) [9]

1. Найти первый различный символ  в 2 строках...
2. Считать 1 файл в 1 строку, 2 файл во 2 строку...
3. если файлы большие читать по немногу, но в цикле до конца файла


programmer90   (2008-12-02 17:27:00) [10]


> Мастера не увядают!

Да уж...зато я уже увял:)


KilkennyCat   (2008-12-02 17:00:00) [11]

Мастера не увядают!


stas   (2008-12-02 16:31:00) [12]

возможно. Например циклом перебрать.


Наверх

Титульная страница Поиск, карта сайта Написать письмо