2013-09-10 5 views
0

Привет всем, и я немедленно извиняюсь, так как Я видел различные темы на сайте, но, к сожалению, моих знаний по-прежнему недостаточно для завершения моего проекта. У меня есть текстовый файл, и я должен сделать сумму каждого столбца (просто нужно общее):Как суммировать текстовый файл столбца

1003|name1|1208.00|2.00  |96.00  |0.00|0.00|0.00|0.00|98.00  |90.95  |7.05  |8516.40 
1011|name2|1450.00|2.00  |49.00  |0.00|0.00|0.00|0.00|51.00  |44.62  |6.38  |9243.7 
1004|name3|1450.00|25.00|170.00|0.00|0.00|0.00|0.00|195.00|175.75|19.25|27912.5 <br> 
1002|name4|765.00 &nbsp;|1.00&nbsp;&nbsp;|17.00&nbsp; |0.00|0.00|0.00|0.00|18.00&nbsp; |15.13&nbsp; |2.87&nbsp; |2193.26 

Мне нужно, чтобы получить это (у меня есть этот файл на Linux, то мы можем использовать Bash, PHP, Mysql ...):

1003|name1|1208.00|2.00&nbsp;&nbsp;|96.00&nbsp; |0.00|0.00|0.00|0.00|98.00&nbsp; |90.95&nbsp; |7.05&nbsp; |8516.40 
1011|name2|1450.00|2.00&nbsp;&nbsp;|49.00&nbsp; |0.00|0.00|0.00|0.00|51.00&nbsp; |44.62&nbsp; |6.38&nbsp; |9243.7 
1004|name3|1450.00|25.00|170.00|0.00|0.00|0.00|0.00|195.00|175.75|19.25|27912.5 <br> 
1002|name4|765.00 &nbsp;|1.00&nbsp;&nbsp;|17.00&nbsp; |0.00|0.00|0.00|0.00|18.00&nbsp; |15.13&nbsp; |2.87&nbsp; |2193.26 <br> 
xxxx|Total&nbsp; |4873.00|30.00|332.00|0.00|0.00|0.00|0.00|362.00 |326.45|35.55|47865.86 

Где xxxx - это идентификационный номер (здесь нет суммы).

Я пытался сделать это в PHP и MySQL - пока не повезло.

+0

Пространства между числами являются неправильными. Как вы планируете обращаться с ними? –

+0

Hi Каждое число разделяется символом "|" – Shimpu

ответ

0

попробовать что-то вроде:

$file = '/path/to/your_file.txt'; 
if (($file = fopen($file, "r")) !== FALSE) { 
    $total = 0; 
    $row_1 = 0; 
    while (($line = fgetcsv($file, 1000, "|")) !== FALSE) { 

     // brutal dirt sanitization 
     foreach ($line as $k => $v) { 
      $line[$k] = (float) preg_replace('#[^0-9\.]#','', $v); 
     } 

     $total = $total + array_sum(array_slice($line, 2)); 
     $row_1 = $row_1 + array_sum(array_slice($line, 2, 1)); 
     //... 
    } 
    echo $total.' | '.$row_1; //... 
} 
else echo 'error ...'; 

также можно дезинфицировать каждую строку, заменив array_sum() на array_map() Жека функцию обратного вызова

+0

Спасибо за ваш ответ :-) , но я получаю странные данные :-( У меня это есть как: nowy.txt 3 | 1003 | Deig | 12 "Deig | bakki | 1208.00 | 2.00 | 96.00 | 0.00 | 0.00 | 0.00 | 0.00 | 98.00 | 90.95 | 7.05 | 8516.40 3 | 1011 | Deig | 12" Ponnupizza | bakki | 1450.00 | 2.00 | 49.00 | 0.00 | 0.00 | 0.00 | 0.00 | 51.00 | 44.62 | 6.38 | 9243.75 3 | 1004 | Deig | 15 "Deig | bakki | 1450.00 | 25.00 | 170.00 | 0.00 | 0.00 | 0.00 | 0.00 | 195.00 | 175.75 | 19.25 | 27912.50 И я получаю Всего: 50851.65 | 0 | 39 | 39 Я делаю это $ row_x .. .... $ line, 2, 2 ... 2, 3 ... 2 , 4 ... – Shimpu

+0

Возможно, у вас нет анимированное содержимое ячеек, вы можете попробовать с моей последней отредактированной версией – Mkdgs

+0

Привет, Большое вам спасибо, что вы проводите время на меня. Как и раньше, я даже не понимаю, почему возникает такой результат: 50851.65 | 0 Когда я использую ваш код в своем файле. Могу ли я как-то отправить вам файл? - может быть, что-то не хватает в файле? – Shimpu

0

Psuedocode:

open source file for reading 
open destination file for writing 
initialise totaling array to zero values 
while not EOF 
    read in line from file 
    explode line into working array 
    for x=2 ; x<14; x++ 
    add totalling array with floatval(working array) 
    write line out to destination file 
close read file 
write out totals array to destination file 
close destingation file 
0

Try, чтобы получить данные текстового файла в таблицу первенствовать и затем сложить столбцы.

Вы можете использовать VB, чтобы получить текст в excel, а затем продолжить сложение значений каждого столбца.

+0

он может просто сохранить как .csv и сделать seprator как '|' файл, почему vb? –

+0

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

0

1) заменить все | символы с, используя str_replace 2) Использование str_getcsv для создания массива из выше полученного CSV строки 3) использовать Еогеасп и цикл по каждой строке и вычислить общую

некоторые PHP-код

$str = file_get_contents('myfile.txt'); 
$str = str_replace('|', ',', $str); 
$csv = str_getcsv($str); 
$totals = array(0,0,0,0); 
foreach ($csv as $row) { 
    $totals[0] += trim($row[0]); 
    $totals[1] += trim($row[2]); 
    $totals[2] += trim($row[3]); 
    $totals[3] += trim($row[4]); 
} 

в $ итоговые массив содержит все итоги!

+0

я проверю его – Shimpu

Смежные вопросы