Простенькая задача.

Тема в разделе "Как сделать...", создана пользователем nixxx, 20 май 2008.

Статус темы:
Закрыта.
  1. nixxx

    nixxx Постоялец

    Регистр.:
    25 ноя 2006
    Сообщения:
    84
    Симпатии:
    46
    Но моих скромных знаний в php не достаточно.

    Помогите пожалуйста реализовать следующее.

    Есть файл list1.txt содержащий строки:

    x аааа
    x бббб
    x вввв
    x ггггг
    x дддд

    И файл list2.txt содержащий:

    1
    2
    3

    На выходе в list3.txt записывается:

    1 аааа
    2 бббб
    3 вввв
    1 ггггг
    2 дддд

    Когда пройдены все строки в list2.txt значения берутся заново начиная с первой строки.
    // By Jeurey:
    1. Задача не уровня pro
    2. Заказ платных услуг - в соответствующем разделе.
    3. Топик закрыт.
    4. Бан на месяц.
     
  2. fpinger

    fpinger

    Регистр.:
    11 май 2007
    Сообщения:
    253
    Симпатии:
    58
    1. Эта зада не для про раздела.
    2. Возможно и найдутся желающие решить её вместо тебя на халяву, но ИМХО это не правильным. Нужно что бы ты сам решил задачу.
    3. Пишешь алгоритм на русском языке. Это пожалуй самое трудное, понять как реализовать. Отсутствие привязки к php облегчит решение.
    4. Смотришь разделы справки php:
    - работа с файлами (чтение\запись);
    - Control Structures (структуры управления) на предмет ветвлений и циклов;
    - работа с массивами;
    - работа со строками.
    5. Пишешь на основе алгоритма код.

    Подсказка по алгоритму... Читаем list2.txt в массив. Читаем list1.txt и пишем в list3.txt, при этом перебирая массив полученный из list2.txt и составляя нужную строку.
     
  3. nixxx

    nixxx Постоялец

    Регистр.:
    25 ноя 2006
    Сообщения:
    84
    Симпатии:
    46
    Не для про? Ну можно и по сложнее :)
    Первому кто сделает, спасибо в виде 5wmz на кошелек.


    Есть файл list.txt содержащий строки:

    x аааа z
    x бббб z
    x вввв z
    x ггггг z
    x дддд z
    x жжж z

    И файлы list1.txt list2.txt list3.txt list4.txt и до list90.txt содержащие:

    В list1.txt:

    метро ВДНХ //первой строкой идет название метро
    ул.Ленина
    ул.Пушкина
    ул.Гагарина

    В list2.txt:

    метро Курская
    Нижняя ул.
    Обуха пер.
    Покровка ул.

    В скрипте указывается кол-во строк из list.txt к которым нужно добавить значения из каждого list1-90.txt

    Например указали -3

    На выходе в Out.txt записывается:

    ул.Ленина аааа ВДНХ
    ул.Пушкина бббб ВДНХ
    ул.Гагарина вввв ВДНХ
    Нижняя ул. гггг Курская
    Обуха пер. дддд Курская
    Покровка ул жжж Курская


    Когда пройдены все строки в list1.txt значения берутся заново начиная с первой строки до заданного количества строк.

    Вобщем, Пишите в личку кто возьмется.
     
  4. DARKtnt

    DARKtnt

    Регистр.:
    19 дек 2007
    Сообщения:
    222
    Симпатии:
    158
    вот для первой задачи

    не очень красиво зато работает

    PHP:
    <?
    /* conf */
    $list1_file 'list1.txt'//файл со списком типа "x аааа"

    $list2_file 'list2.txt'//файл со значениями типа "1"

    $list3_file 'list3.txt'//результирующий файл

    $separated " "//разделитель в первом файле 

    $separate " "//разделирель в итоговом файле
    /* / conf */

    $list1 file($list1_file);
    $list2 file($list2_file);

    $list1_n count($list1);
    $list2_n count($list2);

    for (
    $i 0$i $list1_n$i++)
    {
    list(, 
    $list1[$i] ) = explode($separated$list1[$i]);
    $list1[$i] = str_replace("\n"""$list1[$i]);
    $list1[$i] = str_replace("\r"""$list1[$i]);
    }

    for (
    $i 0$i $list2_n$i++)
    {
    $list2[$i] = str_replace("\n"""$list2[$i]);
    $list2[$i] = str_replace("\r"""$list2[$i]);
    }

    $i 0;
    $i2 0;
    $wr "";
    while (
    $list1[$i])
    {
    $wr .= $list2[$i2].$separate.$list1[$i]."\r\n";
    $i++;
    $i2++;
    if (
    $i2 $list2_n 1
    {
    $i2 0;
    }
    }

    $fs fopen $list3_file"w" ); 
    ftruncate $fs); 
    fwrite $fs$wr ); 
    fflush $fs );
    fclose $fs ); 
    ?>


    Добавлено через 23 минуты
    +++

    ты чет запутано написал для 2-го примера -

    допустим если количество указанных строк 2, то полученный файл будет вида :
    ---
    ул.Ленина аааа ВДНХ
    ул.Пушкина бббб ВДНХ
    ул.Гагарина аааа ВДНХ
    Нижняя ул. бббб Курская
    Обуха пер. аааа Курская
    Покровка ул бббб Курская
    ---

    или

    ---
    ул.Ленина аааа ВДНХ
    ул.Пушкина бббб ВДНХ
    Нижняя ул. вввв ВДНХ
    Обуха пер. гггг Курская
    ---


    а вообще лучше нормально напиши что именно тебе надо сделать
     
    nixxx нравится это.
  5. nixxx

    nixxx Постоялец

    Регистр.:
    25 ноя 2006
    Сообщения:
    84
    Симпатии:
    46
    Если 2 то:

    ---
    ул.Ленина аааа ВДНХ
    ул.Пушкина бббб ВДНХ
    Нижняя ул. вввв Курская
    Обуха пер. гггг Курская
    ---
    И еще, x и z - это маркеры которые нужно заменить x- улица, z- метро
     
  6. DARKtnt

    DARKtnt

    Регистр.:
    19 дек 2007
    Сообщения:
    222
    Симпатии:
    158
    ты меня еще больше запутал, моя ася в профиле - стукни
     
  7. venetu

    venetu

    Регистр.:
    28 мар 2007
    Сообщения:
    735
    Симпатии:
    261
    Код:
    
    $arr1 = file('arr1.txt');
    $arr2 = file('arr2.txt');
    
    $len = max(count($arr1), count($arr2));
    
    $k = $i = 0;
    
    while ($k < $len && $i < $len) {
       echo $arr1[$k] . ' ' .$arr2[$i];
       $i++; 
       $k++;
    
       if ($k == count($arr1)) $k=0;
       if ($i == count($arr2))  $i=0;
    }
    
    
     
  8. nixxx

    nixxx Постоялец

    Регистр.:
    25 ноя 2006
    Сообщения:
    84
    Симпатии:
    46
    Решение найдено. Тема закрыта.
     
  9. DARKtnt

    DARKtnt

    Регистр.:
    19 дек 2007
    Сообщения:
    222
    Симпатии:
    158
    2вариант:
    все сделал как понял
    работает с условием 2
    останавливается после обработки list.txt
    list.txt должен содержать только:

    аааа
    бббб
    вввв
    ггггг
    дддд
    жжж

    без x и z

    PHP:
    <?
    $file_mask 'list00.txt';

    $files_number 3;

    $lines_number 3;

    $sep " ";

    $res_file 'out.txt';

    function 
    GetFile ($_f_n)
    {
    $_f_n file($_f_n);
    $_f_n str_replace("\n"""$_f_n);
    $_f_n str_replace("\r"""$_f_n);
    return 
    $_f_n;
    }

    function 
    GetArr ($_f_mask$_number)
    {
    for (
    $i 1$i <= $_number$i++)
    {
    $_file str_replace ("00"$i$_f_mask);
    $_file GetFile($_file);
    $_list[$i] = $_file;
    }
    $_ins str_replace ("00"""$_f_mask);
    $_ins GetFile($_ins);
    $_list[0] = $_ins;
    return 
    $_list;
    }

    $list GetArr($file_mask$files_number);
    $replaces_n count($list[0]);
    $w "";
    $f 1;
    $u 1;
    for (
    $r 0$r $replaces_n$r++)
    {
    $w .= $list[$f][$u].$sep.$list[0][$r].$sep.$list[$f][0]."\r\n";
    if (
    $u $lines_number)
    {
    $u++;
    }
    else
    {
    $u 1;
    $f++;
    }
    }

    $fs fopen $res_file"w" ); 
    ftruncate $fs); 
    fwrite $fs$w ); 
    fflush $fs );
    fclose $fs ); 

    ?>
     
  10. fpinger

    fpinger

    Регистр.:
    11 май 2007
    Сообщения:
    253
    Симпатии:
    58
    Забанте меня на неделю. Можете и на совсем. Мне зарегаться и востребованными ответами месаджей по темам набрать не проблема. Но я не согласен с модерацией. За такие задачи бы отправлял в бан. Я думаю всем нужны не халявщики, а партнёры. Месандж в разделе работа - понял бы. В разделе "Помогите на халяву" тоже понял бы. Но ведь человек не учится и не собирается учиться, а раздел для того. Ну подсказать. Ну привести пример части задачи. А так уровень плинтуса... Да простят меня боги и не покинет уверенность. :an:
     
Статус темы:
Закрыта.