AMX MOD X
Пятница, 23.01.2026, 14:52:41



Приветствую Вас Гость | RSS
[ Главная ] [ Запись, дозапись данных в текстовый файл - AMX Mod X Форум ] [ Регистрация ] [ Вход ]
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]

Вниманию участников! Данный форум теперь является архивом и вскором времени здесь нельзя будет создавать новых тем! Просьба всем для общения и создания новых тем перейти на наш новый форум: http://amxmodx.su/

  • Страница 1 из 1
  • 1
Модератор форума: slogic, AlMod  
Запись, дозапись данных в текстовый файл
RockonДата: Пятница, 19.12.2008, 17:30:36 | Сообщение # 1
Подполковник
Группа: Скриптеры
Сообщений: 137
Репутация: 1
Статус: Не в сети
Здравствуйте. Меня вот интересует, как можно дозаписать в текстовый файл нужную мне информацию если она отсутствует.
Т.е. есть у меня файл и в нём строка
Code
dannie est'

как мне сделать так, чтобы при наличии допустим этого текста, плагин не дозаписывал его ещё раз? Дело то в том, что файл будет большой и читать конкретную строку не получится. Тут надо будет считывать весь файл и при ненахождении(в моём случае на отдельной строке)

Code
dannie est'

дозаписывать это на последнюю строку..
Как это реализовать?
 
draftДата: Суббота, 20.12.2008, 03:59:32 | Сообщение # 2
Полковник
Группа: Пользователи
Сообщений: 225
Репутация: 3
Статус: Не в сети
Единственный вариант такой:
- Создаёшь буфер вида
nadpis[кол-во_строк][длина_надписи]
counter // ака номер строки
- В начале плагина ты считываешь в этот буфер построчно все строки, попутно увеличиваешь счётчик
- Затем при каждой записи сверяешь с буфером, и дальше либо пишешь в файл и буфер (увеличивая счётчик), либо не пишешь.
 
RockonДата: Суббота, 20.12.2008, 04:16:13 | Сообщение # 3
Подполковник
Группа: Скриптеры
Сообщений: 137
Репутация: 1
Статус: Не в сети
а поподробнее с кодом можно?
как мне считывать каждый раз новую строку?
Количество строк всегда разное, ибо у каждого свой конфиг.


Сообщение отредактировал Rockon - Суббота, 20.12.2008, 04:18:37
 
draftДата: Суббота, 20.12.2008, 19:32:36 | Сообщение # 4
Полковник
Группа: Пользователи
Сообщений: 225
Репутация: 3
Статус: Не в сети
Не понял, ты считываешь из одного файла или из каких-то разных? Если ты не хочешь, чтобы строка повторялась в трёх файлах, то просто последовательно записываешь построчно в буфер все три файла, а затем также сверяешь.
Какой конкретно код интересует?
Вкратце, в plugin_cfg() ты делаешь while(read_file(...)), то бишь, пока мы не достигнем конца файла, построчно записываешь, например, через copy(nadpis[counter], 100, stroka) в буфер и после записи увеличиваешь счётчик counter++ (если файл один, то counter совпадает с номером строки, но лучше делать для надёжности line++)
А дальше, если надо записать, создаёшь проверочную функцию и циклом проверяешь, есть ли в буфере такая строка
Code

for(i = 0; i <= counter; i++)    
{
if(equali(nadpis[i], novaya_nadpis))    
return 0    
}
return 1

Получив, циферку 1 в дочерней, ты можешь в родительской функции сделать write_file(file, novaya_nadpis) и, не забудь,
Code

counter++
copy(nadpis[counter], 100, novaya_nadpis)


Сообщение отредактировал draft - Суббота, 20.12.2008, 19:33:31
 
RockonДата: Воскресенье, 21.12.2008, 12:33:57 | Сообщение # 5
Подполковник
Группа: Скриптеры
Сообщений: 137
Репутация: 1
Статус: Не в сети
файл один. Просто у каждого юзера он свой.
Нужно в этом файле найти определённую строчку, в которой должна быть одна надпись(почему нельзя последовательно считывать строчку, каждый раз её сверять и при несовпадении очищать память? Иначе получается он будет жутко кушать её. А если на сервере 16 человек, как у меня?).
Сама надпись
Code
dannie est'

Если он не находит в файле данную надпись - то он её должен дозаписать на последнюю строчку, тобишь в конец файла


Сообщение отредактировал Rockon - Воскресенье, 21.12.2008, 12:35:48
 
draftДата: Воскресенье, 21.12.2008, 14:29:45 | Сообщение # 6
Полковник
Группа: Пользователи
Сообщений: 225
Репутация: 3
Статус: Не в сети
А как ты, вообще, узнаёшь, из какого файла надо считывать? Вот как раз, если ты будешь постоянно считывать из файла, а не из буфера памяти, тогда у тебя и появятся нереальные лаги.
 
RockonДата: Понедельник, 22.12.2008, 00:22:34 | Сообщение # 7
Подполковник
Группа: Скриптеры
Сообщений: 137
Репутация: 1
Статус: Не в сети
файл тот - materials.txt
лежит в папке sound
 
draftДата: Понедельник, 22.12.2008, 00:43:08 | Сообщение # 8
Полковник
Группа: Пользователи
Сообщений: 225
Репутация: 3
Статус: Не в сети
Это файл на клиенте или на сервере? Потому что на сервере (если я правильно понял) он может быть только один, а на клиенте ты ничего считывать через AMX не сможешь.
 
RockonДата: Понедельник, 22.12.2008, 08:18:16 | Сообщение # 9
Подполковник
Группа: Скриптеры
Сообщений: 137
Репутация: 1
Статус: Не в сети
файл на клиенте и находится в дирректории cstrike\sound
Разве не могу? Это же текстовый файл.
Хорошо, тогда если не могу чтением файла, то тогда стоит ввести переменную свою.
например amx_texture
Тогда такой вопрос:
Я создам свой конфиг, где пропишу только одно
Code
amx_texture 1

как мне перезаписывать конфиг?
Т.е. в теории мне надо:
Если
amx_texture 0
мой текст дозаписывается в materials.txt в конец файла и amx_texture меняется на 1(при этом идёт перезапись в конфиг)
Так вот как мне с нуля перезаписывать конфиг. Т.е. не добавлять на последнюю строчку, а стирать его полностью и записывать ещё раз эту переменную?


Сообщение отредактировал Rockon - Понедельник, 22.12.2008, 09:04:47
 
draftДата: Понедельник, 22.12.2008, 20:14:11 | Сообщение # 10
Полковник
Группа: Пользователи
Сообщений: 225
Репутация: 3
Статус: Не в сети
К сожалению, стирать, а точнее, перезаписывать на клиенте файлы возможно только одним способом - командой "writecfg" (и понятно, что это будет на выходе не *.txt, а *.cfg и притом редактировать ты его никак не сможешь). txt файл можно только закачивать через precache, но ты не узнаешь, закачал он его или он уже есть на клиенте, поэтому amxmodx здесь бессилен, в первую очередь, из-за особенностей движка самой халфы.

Сообщение отредактировал draft - Понедельник, 22.12.2008, 20:15:04
 
RockonДата: Вторник, 23.12.2008, 12:22:14 | Сообщение # 11
Подполковник
Группа: Скриптеры
Сообщений: 137
Репутация: 1
Статус: Не в сети
А если это будет плагин под метамод? В таком случае я смогу обойти блокировку?
Или переименовать файл txt в cfg средствами амхх мода?


Сообщение отредактировал Rockon - Вторник, 23.12.2008, 12:24:15
 
draftДата: Среда, 24.12.2008, 12:31:38 | Сообщение # 12
Полковник
Группа: Пользователи
Сообщений: 225
Репутация: 3
Статус: Не в сети
Metamod также ограничен движком, как и amxmodx
Переименовать ты можешь что угодно в файлах сервера, а клиенту ты можешь лишь что-то закачать через plugin_precache(), либо сохранить конфиг через writecfg на клиенте.
 
RockonДата: Четверг, 25.12.2008, 01:18:53 | Сообщение # 13
Подполковник
Группа: Скриптеры
Сообщений: 137
Репутация: 1
Статус: Не в сети
чорт, там прописываются текстуры, так что тут надо именно в txt
Я маппер)
 
draftДата: Четверг, 25.12.2008, 01:37:38 | Сообщение # 14
Полковник
Группа: Пользователи
Сообщений: 225
Репутация: 3
Статус: Не в сети
К сожалению, был вынужден тебя огорчить :)
 
  • Страница 1 из 1
  • 1
Поиск:

AMX Mod X Russian Community © 2006-2026