Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Delphi] Вовод позиций символов в файле 
:(
    Опции темы
tishaishii
Дата 18.4.2007, 11:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Создатель
***


Профиль
Группа: Завсегдатай
Сообщений: 1262
Регистрация: 14.2.2006
Где: Москва

Репутация: нет
Всего: 8



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

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

Задавайте вопросы.
Благодарен за ответ.
PM MAIL ICQ Skype   Вверх
Rodman
Дата 18.4.2007, 11:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 26
Всего: 122



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;


так?
PM MAIL WWW Skype GTalk YIM MSN   Вверх
tishaishii
Дата 18.4.2007, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Создатель
***


Профиль
Группа: Завсегдатай
Сообщений: 1262
Регистрация: 14.2.2006
Где: Москва

Репутация: нет
Всего: 8



Таак. Попытаюсь обяснить понятнее.
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), сколько потребуется.


PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

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

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0679 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.