Модераторы: Aliance, skyboy, MoLeX, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не удаляются пробелы из строки 
:(
    Опции темы
Mastodont
Дата 31.1.2012, 18:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 347
Регистрация: 18.3.2007

Репутация: нет
Всего: 1



Есть строка в файле capture.txt

Задача
Большие скопления пробелов преобразовать: первый пробел превратить в табуляцию (чтоб в Excel можно было файлик эскпортировать с разбивкой на столбики), а остальные пробелы - убрать. Получившуюся строку записать в файлик.

Табуляция делается на ура, а вот пробелы - НЕ УБИРАЮТСЯ. Хотя все правильно вроде как. А попытка просто удалить символ через unset($stroka[$udal_prob]); дает ошибку.

Кто знает, в чем дело?

Код

<?php
    //читаем строки capture.txt в массив
    $file_v_vide_stroki = file("capture.txt");
    
    //считаем кол-во элементов массива $file_v_vide_stroki
    $kolvo_file_v_vide_stroki = count($file_v_vide_stroki);
    
    //echo $kolvo_file_v_vide_stroki;
        
    //начинаем работать с каждой строкой capture.txt поочереди    
    
    //это правильный for
    //for ($i = 0; $i < $kolvo_file_v_vide_stroki; $i++)
    
    //а этот просто выдает первую строку
    for ($i = 0; $i < 1; $i++)
    {
        //echo $file_v_vide_stroki[$i];        
        
        $stroka = $file_v_vide_stroki[$i];
        
        //вычисляем длину текущей строки capture.txt
        $dlina_stroka = strlen($stroka);        
        
        //начинаем искать, где пробелов больше одного (в ФИО пробелы должны быть; в остальных местах - глюк распознавания; в этих местах пробелы д.б. заменены на символ табуляции, чтобы потом импортировать capture.txt в Excel)
        for ($k = 0; $k < $dlina_stroka; $k++)
        {                    
            //если очередной символ строки является пробелом
            if ($stroka[$k] == " ")
            {
                //то номер этого символа заносим в массив $nomera_probelov[]
                $nomera_probelov[] = $k;
            }
        }
        
        //найдем идущие подряд пробелы
        foreach ($nomera_probelov as $num_probela)
        {            
            $sled = $num_probela + 1;
            $pred = $num_probela - 1;
            
            //если следующий символ строки - пробел, а предыдущий - не пробел, значит это первый пробел из искомой группы пробелов, и из него нужно сделать \t
            if (($stroka[$num_probela] == $stroka[$sled]) and ($stroka[$num_probela] != $stroka[$pred]))
            {    
                $zamenit_na_tab[] = $num_probela;    
            }
            
            //если предшествующий символ строки - пробел (что было заблокировано предыдущем условием, значит это уже не первый пробел группы пробелов, и его надо просто удалить
            if ($stroka[$num_probela] == $stroka[$pred])
            {    
                $udalit_probeli[] = $num_probela;    
            }
        }            
        
        //заменяем первый пробел на \t
        foreach ($zamenit_na_tab as $zam_tab)
            {
                $stroka[$zam_tab] = "\t";
            }
        
        //остальные пробелы просто удаляем
        foreach ($udalit_probeli as $udal_prob)
            {
                    //ВОТ ОНО НЕ РАБОТАЕТ!!! Пробелы как были, так и есть
                    $stroka[$udal_prob] = "";
            }
        
        //и пишем строку с нужными изменениями в файл
        $text_file = fopen("spisok.txt","a");
        
        fwrite($text_file, $stroka);
        
        fclose($text_file);
    }
    
    
?>

PM MAIL   Вверх
skyboy
Дата 31.1.2012, 20:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 8
Всего: 260



Код

$str = preg_replace('#^\s#', "\t", $str); // заменить начальный пробел табуляцией
$str = str_replace(" ", "", $str); // удалить пробелы

PM MAIL   Вверх
Mastodont
Дата 31.1.2012, 21:25 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 347
Регистрация: 18.3.2007

Репутация: нет
Всего: 1



Цитата(skyboy @ 31.1.2012,  20:04)
Код

$str = preg_replace('#^\s#', "\t", $str); // заменить начальный пробел табуляцией
$str = str_replace(" ", "", $str); // удалить пробелы

Регулярочки плохо знаю, твой код круче)

А str_replace() тоже не работает.

Я ж правильно объяснил, что мне надо?  smile

Надо в "Иванов Николай Петрович" пробелы оставить, а убрать надо между "1275", "Иванов Николай Петрович", "BCГ 4598593" и "O 080105 65" ; )
PM MAIL   Вверх
skyboy
Дата 5.3.2012, 02:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 8
Всего: 260



то есть, у тебя есть строка "1275 Иванов Николай Петрович BCГ 4598593 O 080105 65" и надо получить "1275Иванов Николай ПетровичBCГ 4598593O 080105 65"? я уж не спрашиваю, как программа должна "понять", что надо "Иванов Николай Петрович ВСГ 4598593" разбить именно так, а не "Иванов Николай" и "Петрович ВСГ 4598593". хотя бы скажи, зачем тебе пробелы удалять? по чем тогда эксель будет определять значения?
PM MAIL   Вверх
Atos
Дата 5.3.2012, 11:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 2.9.2004
Где: Омск

Репутация: нет
Всего: нет



Цитата(Mastodont @  31.1.2012,  18:44 Найти цитируемый пост)
$stroka[$udal_prob] = "";
  smile  smile  smile  smile в баш 

вместо этого хотя бы так  
Код

$stroka =  substr($stroka, 0, $udal_prob).substr($stroka, $udal_prob+1, strlen($stroka)-$udal_prob-1);





Это сообщение отредактировал(а) Atos - 5.3.2012, 11:15
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Тексты | Следующая тема »


 




[ Время генерации скрипта: 0.0834 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.