Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.01.2012, 19:51   #1
fs444
Форумчанин
 
Регистрация: 18.08.2009
Сообщений: 289
По умолчанию Не удаляются пробелы из строки

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

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

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

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

PHP код:
<?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);
    }
    
    
?>
Вложения
Тип файла: txt capture.txt (274 байт, 135 просмотров)
fs444 вне форума Ответить с цитированием
Старый 31.01.2012, 20:58   #2
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от fs444 Посмотреть сообщение
Табуляция делается на ура, а вот пробелы - НЕ УБИРАЮТСЯ.
PHP код:
$string str_replace(' '''$string); 
Andkorol вне форума Ответить с цитированием
Старый 31.01.2012, 22:15   #3
fs444
Форумчанин
 
Регистрация: 18.08.2009
Сообщений: 289
По умолчанию

Цитата:
Сообщение от Andkorol Посмотреть сообщение
PHP код:
$string str_replace(' '''$string); 
Эта функция просто в строке все символы пробела на отсутствие пробела вообще меняет. А мне надо в "Иванов Николай Петрович" пробелы оставить, а убрать надо между "1275", "Иванов Николай Петрович", "BCГ 4598593" и "O 080105 65" ; )
fs444 вне форума Ответить с цитированием
Старый 31.01.2012, 22:25   #4
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от fs444 Посмотреть сообщение
а остальные пробелы - убрать.
Какой вопрос - такой ответ...

Заменить в функции первый аргумент - одиночный пробел на двойной.
Andkorol вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обрезать пробелы в строке с начала строки и с конца строки (C++) tema65 Помощь студентам 6 28.12.2011 13:24
Пробелы в начале строки nats C# (си шарп) 0 26.07.2011 16:10
Не удаляются лишние пробелы Neurogenus Общие вопросы C/C++ 12 13.05.2010 15:27
Почему строки в компоненте ListBox программно удаляются, а визуально нет? Velross Компоненты Delphi 7 10.12.2009 19:35
Убрать пробелы из строки Neymexa Помощь студентам 2 09.12.2008 14:29