editare fisier linux

pitzy

Membru
Am un fisier excel de forma:
Coloana 1 Coloana 2 Coloana 3 Coloana 4 Coloana 5 Coloana 6
Raport 2011 Centrul de proiecte si programe 26597213 Bucuresti 19.06.2012 0
educationale si sportive pentru
copii si tineret Bucuresti
Raport 2011 DIRECTIA DE ASISTENTA 22970653 Cluj-Napoca 18.06.2012 13,22
SOCIALA SI MEDICALA


Exporata CSV si preluat in linux fisierul arata

Raport 2011;Centrul de proiecte si programe;26597213;Bucuresti;19/06/12;0
;educationale si sportive pentru;;;;
;copii si tineret Bucuresti;;;;
Raport 2011;DIRECTIA DE ASISTENTA;22970653;Cluj-Napoca;18/06/12;13,22
;SOCIALA SI MEDICALA;;;;

; - separatorul de celula

Vreau sa elimin casutele goale astfel incat fisierul sa arate asa

Raport 2011;Centrul de proiecte si programe educationale si sportive pentru copii si tineret Bucuresti;26597213;Bucuresti;19/06/12;0
Raport 2011;DIRECTIA DE ASISTENTA SOCIALA SI MEDICALA;22970653;Cluj-Napoca;18/06/12;13,22

adica celulele din coloana a doua se le imbin astfel incat informatia sa nu mai fie impartita pe mai multe randuri. NU se poate face manual pentru ca sunt peste 4000 de randuri in tabel
 
Exportat din Excel CSV il bagi prin Notepad ++, replace ;; with ; consecutiv de 2-3 ori (ca sa elimine si ;;; sau ;;;;) si gata, il trimiti in linux sau pe luna.
 
Untitled.jpgpai daca elimin ";" ce apare in liniile incomplete pe coloana 2 se muta la sfarsitul liniei anterioare. eu vreau ca informatia din coloana 2 randul x sa se adauge la informatia din coloana 2 randul x-1 daca in fata ei sunt celule goale
 
Am facut cum ai zis tu, nu se intampla nimic. Ramane aceasi situatie ca in poza atasata
Nu multitudinea de caractere ";" e problema ci cum concatenez informatia din celulele respective
 
Code:
<?php
define('c',1);//Inlocuiesti "1" cu numarul coloanei problematice. Prima coloana este coloana 0.
define('input','X:\cale\catre\fisier.csv');//Sursa
define('output','X:\cale\catre\fisiser_corectat.csv');//Destinatia

$file=file(input,'r');
$out=array();
foreach($file as $line => $text){
 $cells=explode(';',trim($text));
 if($cells[0]!=''){
  $out[$line]=$cells;
  $prev=$line;}
 else $out[$prev][c].=' '.$cells[c];}
unset($file,$line,$prev,$text,$cells);
$file=fopen(output,'w');
foreach($out as $line){
 foreach($line as $cell)fwrite($file,$cell.';');
 fwrite($file,"\r\n");}
fclose($file);
echo('Done.');
?>
N-am testat, dar ar trebui sa mearga din prima.
 
Am facut cum ai zis tu, nu se intampla nimic. Ramane aceasi situatie ca in poza atasata
Nu multitudinea de caractere ";" e problema ci cum concatenez informatia din celulele respective

Daca deschizi fisierul in Notepad sunt linii distincte sau e un singur sir lung? Ce separatori de linie ai?
 
Back
Top