Master-X
Форум | Новости | Статьи
Главная » Форум » Программинг, Скрипты, Софт, Сервисы » 
Тема: Как от такого избавиться.
цитата
26/05/12 в 06:26
 Lexikon
после работы в экселе было получено много строк в таком формате:
Name1|text1|text2|text3|||||||
Name2|text1|text2|text3|text4|text5|||||
Name3|text1|text2|text3|text4||||||
ну чтоб не замарачиваться и не перебирать это все вручную, решил написать код для создания файлов и записи в них данных, впринципе вышло то что нужно, но вот один недостаток всё же есть, состоит он в том что, каждая запись ф вайл происходит с новой строки (fputs($fp, $massiv[$k]."\n");) поэтому после последней строки с данными происзодит переход и соответственно пустая строка. Как избавиться от этого недостатка, т.е. не совершать последний переход на новую строку, немогу сообразить icon_confused.gif
<?php

$syn_dir = "resultat"; // директория с результирующими файлами
$file = "data.dat"; //файл с исходными данными
$list = file($file); //получаем массив из файла с данными
$lines = count($list); //получаем кол-во эл-ов массива

for( $i = 0; $i < $lines; $i++ ) //проходимся по массиву                                                   
{

       //echo $list[$i]."<br>";
$massiv = explode("|", preg_replace('#(\|){2,}#', '', $list[$i])); удаляем лишнии вертикалки и разбиваем строку массива $list на подстроки занося в новый массив
       //print_r($massiv);
$name_file = str_replace(" ", "-", trim($massiv[0]).".txt"); //создаем имя будущего файла из нулевого значения массива $massiv
$address = "./".$syn_dir."/".$name_file; // адрес расположения файла
       //echo $name_file."<br />";
       //echo $address."<br />";
       $size_massiv = count($massiv); // определяем кол-во эл-ов массива $massiv
       for( $k = 1; $k < $size_massiv; $k++ ) //запускаем цикл для записи в файл минуя нулевой элемент массива                                                    
       {
         $fp = fopen("$address","a"); // открываем или создаем файл для записи
         fputs($fp, $massiv[$k]."\n"); //пишем в файл, каждая запись с новой строки
         fclose ($fp); // закрываем файл
       }

}


?>
цитата
26/05/12 в 08:34
 ibiz
видимо делать так: (fputs($fp, trim($massiv[$k])."\n");
цитата
26/05/12 в 08:43
 Lexikon
сел позавтракать и пришла мысля, сделал так

<?php

$syn_dir = "resultat";
$file = "data.dat";
$list = file($file);
$lines = count($list);

for( $i = 0; $i < $lines; $i++ )                                                   
{

       //echo $list[$i]."<br>";
$massiv = explode("|", preg_replace('#(\|){2,}#', '', $list[$i]));
       //print_r($massiv);
$name_file = str_replace(" ", "-", trim($massiv[0]).".txt");
$address = "./".$syn_dir."/".$name_file;
       //echo $name_file."<br />";
       //echo $address."<br />";
       unset($massiv[0]);
       $string = join('|', $massiv);
       $resultat = str_replace('|', "\n" ,$string);
         $fp = fopen("$address","a");
         fputs($fp, $resultat);
         fclose ($fp);

}


?>

может немного через одно место, но работает так ка нужно icon_smile.gif
цитата
26/05/12 в 09:07
 StrangeInscription
Что-то действительно "через одно место"
Lexikon:
Код:
unset($massiv[0]);
$resultat = join("\n", $massiv);
цитата
26/05/12 в 09:55
 Lexikon
я бы не отказался от дельного совета icon_rolleyes.gif
unset($massiv[0]); - этим я удаляю нуливой элемент чтобы он в дальнейшем не фигурировал, он мне ненужен далее, ибо первый элемент это название файла а остальное данные которые запишутся в этот файл.
$resultat = join("\n", $massiv); - эту строку я что то у себя не вижу.
цитата
26/05/12 в 10:39
 StrangeInscription
Lexikon, я криво скопировал:
Код:
       $string = join('|', $massiv);
       $resultat = str_replace('|', "\n" ,$string);

можно заменить на
Код:
       $resultat = join("\n", $massiv);


Вообще, если названия файлов уникальны, то можно сделать как-нибудь так:
<?php

$syn_dir = "resultat";
$file = "data.dat";
$list = file($file);
foreach ($list as $line) {
    $data = explode("|", trim($line, "\n |"));
    file_put_contents("./" . $syn_dir . "/" . str_replace(" ", "-", trim($data[0]) . ".txt"), implode("\n", array_slice($data, 1)));
}
цитата
26/05/12 в 10:53
 Lexikon
покавыряю, спасибо!
знаний не много, поэтому просмотрю код поизучаю smail54.gif
цитата
26/05/12 в 14:53
 AWD
да, наклепал ты нехило - 100500 циклов, и в каждом из них ты открываешь и закрываешь файл smail101.gif
лови:
Код:
<?php
$syn_dir = "resultat"; // директория с результирующими файлами
$file = "data.dat"; //файл с исходными данными

$list = file($file, FILE_IGNORE_NEW_LINES); //получаем массив из файла с данными (FILE_IGNORE_NEW_LINES - не будет добавлять \r\n в конец строки)
$list = preg_replace('~(\|){2,}~','',$list); //удаляем дубли "|"

$name_file = str_replace(" ", "-", array_shift($list).".txt"); //создаем имя будущего файла из нулевого значения массива, и одновременно удаляем его

$address = "./".$syn_dir."/".$name_file; // адрес расположения файла
$out = implode("\r\n", $list);
file_put_contents($address, $out);
?>

всё icon_biggrin.gif
цитата
27/05/12 в 07:20
 Lexikon
Спасибо! smail54.gif
Нужно для себя найти время и почитать матчасть, а то я всё время вместо того чтобы взять лопату палкой-копалкой всё делаю, а там где бульдозер нужен, той же палкой-копалкой ебашу. icon_mad.gif


Эта страница в полной версии