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");) поэтому после последней строки с данными происзодит переход и соответственно пустая строка. Как избавиться от этого недостатка, т.е. не совершать последний переход на новую строку, немогу сообразить
<?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);
}
?>
может немного через одно место, но работает так ка нужно
цитата
26/05/12 в 09:07
StrangeInscription
Что-то действительно "через одно место"
Lexikon:
Код:
unset($massiv[0]);
$resultat = join("\n", $massiv);
цитата
26/05/12 в 09:55
Lexikon
я бы не отказался от дельного совета
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
покавыряю, спасибо!
знаний не много, поэтому просмотрю код поизучаю
цитата
26/05/12 в 14:53
AWD
да, наклепал ты нехило - 100500 циклов, и в каждом из них ты открываешь и закрываешь файл
лови:
Код:
<?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);
?>
всё
цитата
27/05/12 в 07:20
Lexikon
Спасибо!
Нужно для себя найти время и почитать матчасть, а то я всё время вместо того чтобы взять лопату палкой-копалкой всё делаю, а там где бульдозер нужен, той же палкой-копалкой ебашу.
Новая тема
Ответить
Эта страница в полной версии