Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [Delphi] Вовод позиций символов в файле


Автор: tishaishii 18.4.2007, 11:04
Помогите реализовать наиболее быстрый алгоритм вывода позиций символов в файле.
Входная информация - произвольный файл.
Выходная - тоже файл, в котором содержатся записи типа:
Код
символ1позиция1позиция2...
символ2позиция1позиция2...
.......................................................

все символы 0-255, wide-char разбиваются символы ASCII (0-255).
Позиция для записи конкретного символа = разница текущей и предыдущей позиций этого же символа.
Определение позиции сивола должно происходить для каждого символа в отдельности, т.е. определить позиции первого сивола, удалить все такие "первые" символы из файла (можно логически), затем определить позиции следующего, удалить его. В итоге входнй файл окажется пустым.

Задавайте вопросы.
Благодарен за ответ.

Автор: Rodman 18.4.2007, 11:11
tishaishii, c позициями не понятно... позиция в строке или лучше позиция в матрице?!

Добавлено через 11 минут и 33 секунды
Код

procedure TForm1.Button1Click(Sender: TObject);
var st,sr:TStringList;
    i,j:Integer;
begin
  st:=TStringList.Create;

  try
    st.LoadFromFile('c:\1.txt');
    sr:=TStringList.Create;
    try
      for i:=0 to 255 do
        sr.Add('Symbol'+chr(i));
      for i:=0 to st.Count-1 do
      begin
        for j:=1 to length(st.Strings[i])do
          sr.Strings[ord(st.Strings[i][j])]:=sr.Strings[ord(st.Strings[i][j])]+'('+IntToStr(i)+','+IntToStr(j)+') ';
      end;
      sr.SaveToFile('c:\res.txt');
    finally
      sr.Free;
    end;
  finally
    st.Free;
  end;
end;


так?

Автор: tishaishii 18.4.2007, 16:32
Таак. Попытаюсь обяснить понятнее.
1. Находим самый первый символ в файле, пишем символ.
2. Ищем следующий такой же символ, пишем позицию этого символа в файле в виде ASCII-символов (0-255).
3. Ищем следующий такой же символ, пишем ASCII-символы с кодом "предыдущая позиция минус текущая позиция".
4. И так далее.
5. Удаляем все такие же символы из файла.
6. Находим первый символ в файле....... начинаем с 1го шага, пока файл не станет пустым.

Если позиция символа (разность текущей и предыдущей) больше 255, пишем позицию в виде нескольких символов (0-255).

Добавлено через 12 минут и 6 секунд
Вход:
Код
abcdeabca

{chr(x)} - имеется в виду символ с кодом x. 5 и 3 - позиция символа "a", начиная с нулевой позиции.
Выход на следующем шаге:
Код
a{chr(5)}{chr(3)}

Вход на следующем шаге:
Код
bcdebc

Выход на следующем шаге:
Код
b{chr(4)}

Вход на следующем шаге:
Код
cdec

Выход на следующем шаге:
Код
c{chr(3)}

Вход на следующем шаге:
Код
de

Выход на следующем шаге:
Код
d

Вход на следующем шаге:
Код
e

Выход на следующем шаге:
Код
e

Вход на следующем шаге:
Код
{ПУСТО}

Если разница текущей и предыдущей позиций символа больше 255, надо писать столько символов ASCII(0-255), сколько потребуется.


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)