|
Автор |
Сообщение |
Я
Новенький
Зарегистрирован: 10.03.2006 Сообщения: 12
|
|
|
|
Представим такую ситуацию:
У меня есть два файла (1.dat и 2.dat). В первом хранится, например, каталог людей (каждый человек на новой строке, но строки идут не подряд, т.е. есть между ними еще и пустые). Мне нужно вписать во второй файл адреса этих людей так, чтобы их можно было сопоставить.
Например 1.dat:
Петров Женя
Иванов Коля
Козлов Вася
Питер Пен
Нужно, чтобы файл 2.dat выглядел так:
ул.Первая
ул.Вторая
ул.Третья
ул.Четвертая
Можно ли это осуществить, используя PHP??? [/code] |
|
Вернуться к началу |
|
|
Я
Новенький
Зарегистрирован: 10.03.2006 Сообщения: 12
|
|
|
|
P.S. Использовать функцию FSEEK() я не могу, т.к. не знаю кол-во символов в строках! |
|
Вернуться к началу |
|
|
den
Старожил
Зарегистрирован: 31.01.2006 Сообщения: 13870 Откуда: Кировоград, Украина
|
|
|
|
Можно конечно. Но у меня вопрос а не проще ли использовать базу данных? и еще: зачем два файла, если это можно все впихнуть в один????? Добавив, например, разделитель : или ; |
|
Вернуться к началу |
dhsilabs@jabber.ru |
|
|
Я
Новенький
Зарегистрирован: 10.03.2006 Сообщения: 12
|
|
|
|
Извиняюсь за свой "чайниконизм", но не могли бы Вы поподробнее объяснить как применять разделитель в одном файле!??? |
|
Вернуться к началу |
|
|
den
Старожил
Зарегистрирован: 31.01.2006 Сообщения: 13870 Откуда: Кировоград, Украина
|
|
|
|
Поищи функцию explode()/
Вот пример:
$A = explode(":","user:password:home_dir:shell", 3);
Массив $A будет содержать элементы: "user", "password" и "home_dir:shell". Последний элемент - это остаток исходной строки. |
|
Вернуться к началу |
dhsilabs@jabber.ru |
|
|
Я
Новенький
Зарегистрирован: 10.03.2006 Сообщения: 12
|
|
|
|
Огромное спасибо, Денис! Правда, функция explode() действует немного по-другому, но именно она меня и выручила. Благодарю за быстрый ответ! |
|
Вернуться к началу |
|
|
den
Старожил
Зарегистрирован: 31.01.2006 Сообщения: 13870 Откуда: Кировоград, Украина
|
|
|
|
Всегда рад помочь |
|
Вернуться к началу |
dhsilabs@jabber.ru |
|
|
Я
Новенький
Зарегистрирован: 10.03.2006 Сообщения: 12
|
|
|
|
Ну вот! в процессе доработки возник еще один вопрос.
Допустим, у меня есть файл 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() удалить всё после записи "Иванов ;; ", и вставить новую цифру, а затем вновь вернуть скопированный текст в этот файл... Не правда ли громоздко??? Тем более этим нужно пользоваться часто, да при том и одновременно с кем-нибудь.
Не могли бы Вы подсказать более рациональный способ??? |
|
Вернуться к началу |
|
|
Я
Новенький
Зарегистрирован: 10.03.2006 Сообщения: 12
|
|
|
|
Решил-таки не мучится и воспользоваться БД MySql. И, как ни странно , появился еще один вопрос!
мне нужно перенести все значения одного поля в другое. Я делаю так:
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 попадает только одна цифра! В чем же тут ошибка (если она есть) ??? Или можно как-то подругому решить этот вопрос???
|
|
Вернуться к началу |
|
|
den
Старожил
Зарегистрирован: 31.01.2006 Сообщения: 13870 Откуда: Кировоград, Украина
|
|
|
|
Ошибки нет, просто программа делает то, что ты ей сказал
Ведь в запросе update BD set Yesterday=".$r[3]." ты не указываешь какую именно запись нужно обновить, у тебя нет WHERE, поэтому обновляются все записи. |
|
Вернуться к началу |
dhsilabs@jabber.ru |
|
|
Я
Новенький
Зарегистрирован: 10.03.2006 Сообщения: 12
|
|
|
|
Этот вопрос я решил просто:
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 Откуда: Кировоград, Украина
|
|
|
|
Надо выставлять кодировки |
|
Вернуться к началу |
dhsilabs@jabber.ru |
|
|
Anderson
Завсегдатай
Зарегистрирован: 08.07.2006 Сообщения: 642 Откуда: localhost
|
|
|
|
В даном случае действительно лучше использовать MySQL Query.
А насчет кодировок - нужно установить локаль функцией setLocale() _________________ ArchLinux + Enlightenment 17 (E17) |
|
Вернуться к началу |
|
|
den
Старожил
Зарегистрирован: 31.01.2006 Сообщения: 13870 Откуда: Кировоград, Украина
|
|
|
|
SetLocale() тут наверное не поможет )) Нужно
Код: |
mysql_query('SET NAMES cp1251;'); |
|
|
Вернуться к началу |
dhsilabs@jabber.ru |
|
|
|
|