Есть вопрос?
Зайди на форум

Поиск на сайте: Advanced

Denix - новый дистрибутив Linux. Русификация Ubuntu и установка кодеков

dkws.org.ua
Форум сайта dkws.org.ua
 
Главная    ТемыТемы    АльбомАльбом    РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Работа с файлом

 
Начать новую тему Ответить на тему    Список форумов dkws.org.ua -> PHP
 
Автор Сообщение
Я

Новенький


Зарегистрирован: 10.03.2006
Сообщения: 12

СообщениеДобавлено: Чт Май 04, 2006 7:31 am    Заголовок сообщения: Работа с файлом
Ответить с цитатой

Представим такую ситуацию: Smile
У меня есть два файла (1.dat и 2.dat). В первом хранится, например, каталог людей (каждый человек на новой строке, но строки идут не подряд, т.е. есть между ними еще и пустые). Мне нужно вписать во второй файл адреса этих людей так, чтобы их можно было сопоставить.
Например 1.dat:
Петров Женя
Иванов Коля

Козлов Вася


Питер Пен


Нужно, чтобы файл 2.dat выглядел так:
ул.Первая
ул.Вторая

ул.Третья


ул.Четвертая



Можно ли это осуществить, используя PHP??? Arrow [/code]
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Я

Новенький


Зарегистрирован: 10.03.2006
Сообщения: 12

СообщениеДобавлено: Чт Май 04, 2006 7:33 am    Заголовок сообщения:
Ответить с цитатой

P.S. Использовать функцию FSEEK() я не могу, т.к. не знаю кол-во символов в строках! Confused
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
den

Старожил


Зарегистрирован: 31.01.2006
Сообщения: 13870
Откуда: Кировоград, Украина

СообщениеДобавлено: Чт Май 04, 2006 12:43 pm    Заголовок сообщения:
Ответить с цитатой

Можно конечно. Но у меня вопрос а не проще ли использовать базу данных? и еще: зачем два файла, если это можно все впихнуть в один????? Добавив, например, разделитель : или ;
Вернуться к началу
Посмотреть профиль Отправить личное сообщение dhsilabs@jabber.ru
Я

Новенький


Зарегистрирован: 10.03.2006
Сообщения: 12

СообщениеДобавлено: Чт Май 04, 2006 2:44 pm    Заголовок сообщения: Работа с файлом
Ответить с цитатой

Извиняюсь за свой "чайниконизм", но не могли бы Вы поподробнее объяснить как применять разделитель в одном файле!??? Shocked
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
den

Старожил


Зарегистрирован: 31.01.2006
Сообщения: 13870
Откуда: Кировоград, Украина

СообщениеДобавлено: Чт Май 04, 2006 2:55 pm    Заголовок сообщения:
Ответить с цитатой

Поищи функцию explode()/
Вот пример:

$A = explode(":","user:password:home_dir:shell", 3);

Массив $A будет содержать элементы: "user", "password" и "home_dir:shell". Последний элемент - это остаток исходной строки.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение dhsilabs@jabber.ru
Я

Новенький


Зарегистрирован: 10.03.2006
Сообщения: 12

СообщениеДобавлено: Чт Май 04, 2006 3:59 pm    Заголовок сообщения: Работа над файлом
Ответить с цитатой

Огромное спасибо, Денис! Правда, функция explode() действует немного по-другому, но именно она меня и выручила. Благодарю за быстрый ответ!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
den

Старожил


Зарегистрирован: 31.01.2006
Сообщения: 13870
Откуда: Кировоград, Украина

СообщениеДобавлено: Чт Май 04, 2006 4:04 pm    Заголовок сообщения:
Ответить с цитатой

Всегда рад помочь
Вернуться к началу
Посмотреть профиль Отправить личное сообщение dhsilabs@jabber.ru
Я

Новенький


Зарегистрирован: 10.03.2006
Сообщения: 12

СообщениеДобавлено: Пт Май 05, 2006 2:18 pm    Заголовок сообщения:
Ответить с цитатой

Ну вот! Embarassed в процессе доработки возник еще один вопрос.
Допустим, у меня есть файл 13.dat и в нем записано:

Петров ;; 13

Иванов ;; 423
Дубайлов ;; 4289


Но мне нужно заменить цифру, например, у Иванова.
Я пытаюсь сделать следующее:
<? $dat=file("13.dat");
$file=fopen("13.dat", "a+");
$i=-1; //Именно "-1", чтобы не вылетала из списка нулевая строка
while($i++<10)
{
if(strpos($dat[$i], "Иванов")!==false) // Если найдена запись "Иванов"
{
\\\\\\\\\\\\\\\\\\\ ?>
А дальше хочу (но не знаю как!) определить кол-во символов во всех предыдущих строках и в данной строке до этой цифры ( strlen() ), затем скопировать все, что ниже ее, в другой файл, потом использовать FSEEK($file, "число симолов, которое нужно пропустить", 0) и при помощи FTRUNCATE() удалить всё после записи "Иванов ;; ", и вставить новую цифру, а затем вновь вернуть скопированный текст в этот файл... Не правда ли громоздко??? Тем более этим нужно пользоваться часто, да при том и одновременно с кем-нибудь.
Не могли бы Вы подсказать более рациональный способ??? Arrow
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Я

Новенький


Зарегистрирован: 10.03.2006
Сообщения: 12

СообщениеДобавлено: Пн Май 08, 2006 6:30 am    Заголовок сообщения:
Ответить с цитатой

Решил-таки не мучится и воспользоваться БД MySql. И, как ни странно Smile , появился еще один вопрос!
мне нужно перенести все значения одного поля в другое. Я делаю так:

mysql_connect("Мое соединение");// Подключаюсь
mysql_select_db("BD"); //Выбираю свою БД (таблица BD уже создана)
$res=mysql_query('select * from BD where today>0');
// Ищу значения записей, где значение поля TODAY>0

mysql_query("update BD set yesterday=0");
// Уничтожаю вчерашние данные
while($r=mysql_fetch_row($res))
{
mysql_query("update BD set Yesterday=".$r[3]." ");
// Записываю данные поля TODAY($r[3]) в поле YESTERDAY
}

mysql_query("update Users set today=0");
// Уничтожаю сегоднешние данные (а лучше сказать обновляю)
mysql_free_result($res);
mysql_close(); // Закрываю соединение


Но вместо того, чтобы перенести все значения поля TODAY в поле YESTERDAY, получается, что в поле YESTERDAY попадает только одна цифра! В чем же тут ошибка (если она есть) ??? Или можно как-то подругому решить этот вопрос???
Arrow
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
den

Старожил


Зарегистрирован: 31.01.2006
Сообщения: 13870
Откуда: Кировоград, Украина

СообщениеДобавлено: Пн Май 08, 2006 7:58 am    Заголовок сообщения:
Ответить с цитатой

Ошибки нет, просто программа делает то, что ты ей сказал Very Happy
Ведь в запросе update BD set Yesterday=".$r[3]." ты не указываешь какую именно запись нужно обновить, у тебя нет WHERE, поэтому обновляются все записи.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение dhsilabs@jabber.ru
Я

Новенький


Зарегистрирован: 10.03.2006
Сообщения: 12

СообщениеДобавлено: Пн Май 08, 2006 9:03 am    Заголовок сообщения:
Ответить с цитатой

Twisted Evil Twisted Evil Twisted Evil
Этот вопрос я решил просто:


mysql_query("update Users set yesterday=0");
mysql_query("update Users set Yesterday=Today ");
mysql_query("update Users set today=0");
(заменить-то надо все значения полей!!!)

Теперь вот думаю как впихнуть в MySQL русский текст, ведь если выводить значения полей в браузер выводится русский текст, а если смотреть через саму БД там что-то такое: "=ьюаюфв=оhjas3ё!" получается... Поэтому и нормальный поиск нельзя сделать! Ищешь русский текст, а MySql сравнивает его с этими иероглифами и ничего не выдает!!! Пробовал перекодировать текст по-разному, ничего не выходит!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
den

Старожил


Зарегистрирован: 31.01.2006
Сообщения: 13870
Откуда: Кировоград, Украина

СообщениеДобавлено: Пн Май 08, 2006 2:16 pm    Заголовок сообщения:
Ответить с цитатой

Надо выставлять кодировки
Вернуться к началу
Посмотреть профиль Отправить личное сообщение dhsilabs@jabber.ru
Anderson

Завсегдатай


Зарегистрирован: 08.07.2006
Сообщения: 642
Откуда: localhost

СообщениеДобавлено: Сб Авг 26, 2006 7:31 pm    Заголовок сообщения: re:re
Ответить с цитатой

В даном случае действительно лучше использовать MySQL Query.
А насчет кодировок - нужно установить локаль функцией setLocale()
_________________
ArchLinux + Enlightenment 17 (E17)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение anderson.dunai@gmail.com Моб. телефон ICQ Number
den

Старожил


Зарегистрирован: 31.01.2006
Сообщения: 13870
Откуда: Кировоград, Украина

СообщениеДобавлено: Вс Авг 27, 2006 5:33 am    Заголовок сообщения:
Ответить с цитатой

SetLocale() тут наверное не поможет )) Нужно

Код:
mysql_query('SET NAMES cp1251;');
Вернуться к началу
Посмотреть профиль Отправить личное сообщение dhsilabs@jabber.ru
Показать сообщения:   
Начать новую тему Ответить на тему    Список форумов dkws.org.ua -> PHP Часовой пояс: GMT
Страница 1 из 1
 Главная страница сайта
 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
© Колисниченко Денис