Модераторы: volvo877, Snowy, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Добавление в фаил, Между определёнными данными 
V
    Опции темы
SinSoul
Дата 7.6.2007, 01:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 7.6.2007

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



Добрый день или вечер!
Я сделал игру на Паскале(курсовая), но появилась маленькая проблема. При завершении игры, лучшие 15 результатов добавляются в фаил. Проблема в том, что мне надо добавлять до или после лучшего результата, в зависимости от нового результата. Было несколько идей, но так ни одну и не смог воплотить. Сперва думал попробовать с функцией StrReplace() - не вышло, даже начать не смог. Второй вариант - считывать каждую линию, ввести в массив и потом сравнивать, но результат не далеко ушёл, т.к в файле не только integer типа данные.

Пример:
1. Игрок1 - 152
2. Игрок2 - 131
3. Игрок3 - 111

Новый игрок набрал 122, нужно вставить между 2 и 3 результатами.
Заранее благодарю.

_____
С уважением, Дмитрий.
PM MAIL   Вверх
Poseidon
Дата 7.6.2007, 02:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

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



Сделай формат файла такой:

Код

152 Игрок1
131 Игрок2
111 Игрок3


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

PS. Результат обязательно хранить в текстовом файле?


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
SinSoul
Дата 7.6.2007, 02:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 7.6.2007

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



Цитата(Poseidon @ 7.6.2007,  02:45)
PS. Результат обязательно хранить в текстовом файле?

А есть другой выбор?

Существует ли функция сортировки массива? В php есть, может и в паскале тоже есть? Или мне создать функцию проверки(сравнивания) каждого элемента массива? И ещё, 
Код

152 Игрок1
132 Игрок2
...

эти данные можно получить только string типа, возможно сравнивание числовых значений после этого?
Или я что-то не догоняю?
Благодарю за помощь!
PM MAIL   Вверх
_Dargin_
Дата 7.6.2007, 09:59 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 1.6.2007
Где: Барнаул

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



Либо использовать записи - не подойдет, если файл должен кто-то видеть, 

или брать кусок файла после 2 строчки-> загонять его в TMemoryStream-> очистить содержимое файла Truncate(как-то так)-> добавлять строку-> обратно вписывать содержимое TMemoryStream

Изврат конечно.  smile 

Поиск чисел в тексте
Идя по каждой букве str:string проверяем
Код

var str,str2:string; i:word; answer:integer;

for i:= 1 to length(str) do
if (Ord(str[i])>47)and(Ord(str[i])<50) then str2:=str2+str[i];
answer:=StrToInt(str2);


Учитывая что пользователь может в нике указать цифры меняем код вот так:
Код

var str,str2:string; i:word; answer:integer;

for i:= 1 to length(str) do
if (Ord(str[i])>47)and(Ord(str[i])<50) then str2:=str2+str[i] else str2:='';
answer:=StrToInt(str2);

Считывается последние число, если в конце нет никаких символов.

Кстати в TurboPascal 7 могут быть проблемы с функцией StrToInt, поэтому советую использовать компиляторы типа TMTPascal.

Таким образом получаем число, а потом сортируем. и записываем в файл, если не устраивает первый вариант.

Надеюсь помог smile 

Это сообщение отредактировал(а) _Dargin_ - 7.6.2007, 10:23
PM MAIL ICQ Skype   Вверх
SinSoul
Дата 7.6.2007, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 7.6.2007

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



Цитата(_Dargin_ @ 7.6.2007,  09:59)
Либо использовать записи - не подойдет, если файл должен кто-то видеть, 

или брать кусок файла после 2 строчки-> загонять его в TMemoryStream-> очистить содержимое файла Truncate(как-то так)-> добавлять строку-> обратно вписывать содержимое TMemoryStream

Изврат конечно.  smile 

Поиск чисел в тексте
Идя по каждой букве str:string проверяем
Код

var str,str2:string; i:word; answer:integer;

for i:= 1 to length(str) do
if (Ord(str[i])>47)and(Ord(str[i])<50) then str2:=str2+str[i];
answer:=StrToInt(str2);


Учитывая что пользователь может в нике указать цифры меняем код вот так:
Код

var str,str2:string; i:word; answer:integer;

for i:= 1 to length(str) do
if (Ord(str[i])>47)and(Ord(str[i])<50) then str2:=str2+str[i] else str2:='';
answer:=StrToInt(str2);

Считывается последние число, если в конце нет никаких символов.

Кстати в TurboPascal 7 могут быть проблемы с функцией StrToInt, поэтому советую использовать компиляторы типа TMTPascal.

Таким образом получаем число, а потом сортируем. и записываем в файл, если не устраивает первый вариант.

Надеюсь помог smile

Да! Конечно помогли! Спасибо большое! А насчёт TMemoryStream, ну я не настолько хороший "Паскалист", первый раз в жизни слышу о таком smile, в любом случае большое спасибо!
P.S. пользователь не сможет ввести цифры в име, т.к. я сделал проверку на нажатые клавиши smile
Выглядит приблизительно вот так:
Код

USES crt;
var k         :char;
    name    :string;
    i       :integer;
const keysallowed: set of char = ['q','w','e','r','t','y','u','i','o','p','a','s','d','f','g','h','j','k','l','z','x','c','v','b','n','m'];
begin
  name:='';
  {здесь можно начать цикл, например while k<>#13 do, тоесть имя будет пополнятся пока не нажмёте enter}
  {while k<>#13 do
    begin}
        if k=#8 then{здесь аналог обычному стиранию, то есть при нажатии backspace из переменной name будет стёрта последняя буква}
            begin
                i:=length(name);
                name[i]:=#0;
            end;
        k:=readkey;
        if (k in keysallowed) then
            name:=name+k;
    {end;}
  writeln(name);
  readln;
end.


Это сообщение отредактировал(а) SinSoul - 7.6.2007, 18:08
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi"
THandle
Rrader
volvo877

Запрещается!

1. Обсуждать и делится взломанными компонентами или программным обеспечением

2. Публиковать ссылки на варез

3. Оффтопить

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, THandle, Rrader, volvo877.

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


 




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


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

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