Люблю то, что делаю!
С нами с 22.10.06
Сообщения: 5053
Рейтинг: 4418
|
Добавлено: 26/05/12 в 06:26 |
после работы в экселе было получено много строк в таком формате:
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); // закрываем файл
}
}
?> |
|
|
|
|
С нами с 24.10.04
Сообщения: 18881
Рейтинг: 9010
|
Добавлено: 26/05/12 в 08:34 |
видимо делать так: (fputs($fp, trim($massiv[$k])."\n");
|
|
|
|
Люблю то, что делаю!
С нами с 22.10.06
Сообщения: 5053
Рейтинг: 4418
|
Добавлено: 26/05/12 в 08:43 |
сел позавтракать и пришла мысля, сделал так
Код: [развернуть] |
<?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);
}
?>
|
может немного через одно место, но работает так ка нужно
|
|
|
|
С нами с 30.04.12
Сообщения: 51
Рейтинг: 157
|
Добавлено: 26/05/12 в 09:07 |
Что-то действительно "через одно место"
Lexikon:
Код: | unset($massiv[0]);
$resultat = join("\n", $massiv); |
|
|
|
|
Люблю то, что делаю!
С нами с 22.10.06
Сообщения: 5053
Рейтинг: 4418
|
Добавлено: 26/05/12 в 09:55 |
я бы не отказался от дельного совета
unset($massiv[0]); - этим я удаляю нуливой элемент чтобы он в дальнейшем не фигурировал, он мне ненужен далее, ибо первый элемент это название файла а остальное данные которые запишутся в этот файл.
$resultat = join("\n", $massiv); - эту строку я что то у себя не вижу.
|
|
|
|
С нами с 30.04.12
Сообщения: 51
Рейтинг: 157
|
Добавлено: 26/05/12 в 10:39 |
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)));
}
|
|
|
|
|
Люблю то, что делаю!
С нами с 22.10.06
Сообщения: 5053
Рейтинг: 4418
|
Добавлено: 26/05/12 в 10:53 |
покавыряю, спасибо!
знаний не много, поэтому просмотрю код поизучаю
|
|
|
|
С нами с 03.02.11
Сообщения: 842
Рейтинг: 301
|
Добавлено: 26/05/12 в 14:53 |
да, наклепал ты нехило - 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);
?>
|
всё
|
|
|
|
Люблю то, что делаю!
С нами с 22.10.06
Сообщения: 5053
Рейтинг: 4418
|
Добавлено: 27/05/12 в 07:20 |
Спасибо!
Нужно для себя найти время и почитать матчасть, а то я всё время вместо того чтобы взять лопату палкой-копалкой всё делаю, а там где бульдозер нужен, той же палкой-копалкой ебашу.
|
|
|
|