2009-12-09 2 views
1

Я читаю текстовый файл на форматеPHP строка манипуляции

Телефон # (вкладка) Текст (разрыв строки) (разрыв строки)

Или более конкретно

4799999999 Hey! You owe us $576.53. Pay up to account no. 9760.00.12345, ID: 201561438. 

4798888888 Hey! You owe us $199. Pay up to account no. 9760.05.12345, KID: 201565173. 

4797777777 Hey! You owe us... and so on. 

Я хочу чтобы сохранить это в базе данных SQL, поэтому мне нужно разбить это на номера телефонов и текст.

Любые идеи о том, как разделить строку на пары в PHP? И следует ли хранить эти значения в массиве до сохранения на SQL или просто сохранить его сразу?

+0

Вау, вы ответите быстро! Мне тяжело следить за этим :) – Frode

ответ

6

Прочитайте файл по строкам, разделите каждую строку на машине вкладки и затем поместите ее в БД, используя подходящий SQL для вашей платформы БД.

С какой целью вы столкнулись с проблемой?

+0

Это все, что касается разлома строки, это моя главная проблема прямо сейчас. – Frode

+1

+1 для простоты. OP: Используйте 'explode (" \ t ", $ line, 2)' для разделения строки только на вкладке * first *. – jensgram

1

Вы можете использовать регулярные выражения, чтобы разбить строки и затем ввести их в базу данных с помощью SQL.

^([0-9]{10})(.*) 

возвращает номер телефона в качестве первой захваченной группы, а оставшийся текст - второй захваченной группой.

+0

Э-э, да. Я предположил, что вы можете сделать это с помощью регулярного выражения, но я понятия не имею, как это работает, на самом деле ... Я довольно новичок в PHP и ничего не знаю о регулярном выражении, кроме некоторого представления о том, что вы можете использовать это для. – Frode

+0

Глядя на другие решения, вам, вероятно, лучше пойти на 'explode'. Использование RegEx здесь, вероятно, будет чрезмерно сложным - мое плохое! : P –

+0

Всегда есть место для некоторого регулярного выражения. –

3

Используйте функцию explode с вкладкой (\t) на каждой строке.

4
$data = file_get_contents ($file); // Assuming $file holds path to file 
if ($data) { 
    $lines = explode("\n\n", $data); 
    foreach ($lines as $line) { 
     list ($phone, $message) = explode("\t", $line, 2); 
     // do whatever you need with it 
    } 
} 
+0

Рассмотрите переход '2' в качестве третьего аргумента' explode'. – jensgram

+0

Спасибо, добавили лимит. –

+0

Хорошо, я пробовал это сейчас, и он разбивает строку на первый телефон #, а затем на весь остальной файл. Возможно ли, что разрыв строки отличается из-за кодировки символов файлов? – Frode

1

Предполагая, что файл не огромный, вы можете просто прочитать строки в массив с file() и перебирать их, как так:

$lines = file($filename); 

foreach($lines as $line) { 
    $line_arr = explode("\t", $line, 2); 

    if(!empty($line_arr)) { 
    // $line_arr[0] will be the phone number and 
    // $line_arr[1] will be the text; insert them into your database 
    // however you please. 
    } 
} 
1

Я думаю, вы бы лучше с помощью strpos Функция, если в текстовой части есть вкладки.

$lines = file($filename); 

foreach ($lines as $line) 
{ 
    $tab = strpos($line, "\t"); 
    $num = substr($line, 0, $tab); 
    $text = substr($line, $tab); 
} 

Заменить file функцию и foreach с fopen и fgets (see example), если файл является особенно большим.

+0

Третий параметр explode() - $ limit, что избавляет вас от беспокойства по поводу вкладок после первого. –

+0

Похоже, я чему-то научился сегодня, благодаря Иордании.На самом деле мне было бы интересно увидеть, какая из них имеет лучшую производительность (хотя это будет довольно небольшая разница TBH) – DisgruntledGoat