2017-07-09 3 views
-5

ich eine Textdatei haben:überprüfen und fügen Spalte in Textdatei

 
FIELD1;FIELD2;FIELD3;FIELD4;FIELD5;;FIELD7;FIELD8;FIELD9;FIE‌​LD10;FIELD11;FIELD12‌​;FIELD13;FIELD14;FIE‌​LD15;FIELD16;FIELD17‌​;FIELD18;FIELD19;FIE‌​LD20;FIELD21;FIELD22‌​;IT0017;random information;IT0077;IT010‌​5;... 
FIELD1;FIELD2;FIELD3;FIELD4;FIELD5;;FIELD7;FIELD8;FIELD9;FIE‌​LD10;FIELD11;FIELD12‌​;FIELD13;FIELD14;FIE‌​LD15;FIELD16;FIELD17‌​;FIELD18;FIELD19;FIE‌​LD20;FIELD21;FIELD22‌​;IT0006;IT0017;random information;IT0077;NaN;IT010‌​5;... 
FIELD1;FIELD2;FIELD3;FIELD4;FIELD5;;FIELD7;FIELD8;FIELD9;FIE‌​LD10;FIELD11;FIELD12‌​;FIELD13;FIELD14;FIE‌​LD15;FIELD16;FIELD17‌​;FIELD18;FIELD19;FIE‌​LD20;FIELD21;FIELD22‌​;IT010‌​5;... 
FIELD1;FIELD2;FIELD3;FIELD4;FIELD5;;FIELD7;FIELD8;FIELD9;FIE‌​LD10;FIELD11;FIELD12‌​;FIELD13;FIELD14;FIE‌​LD15;FIELD16;FIELD17‌​;FIELD18;FIELD19;FIE‌​LD20;FIELD21;FIELD22‌​;IT0006;IT010‌​5;... 

basierend auf 3 Feldern: IT0006IT0017random data

  • In der ersten Reihe, ich habe IT0017; random information;IT0077 aber nicht IT0006 (column_23) und NaN (column_27)
  • In der zweiten Reihe habe ich alle Spalte (guter Fall)
  • In der dritten Zeile habe ich keine dieser fünf Spalte
  • In der vierten habe ich nur die IT0006 Feld.

Ich mag würde diese Ausgabe erstellen:

 
FIELD1;FIELD2;FIELD3;FIELD4;FIELD5;;FIELD7;FIELD8;FIELD9;FIE‌​LD10;FIELD11;FIELD12‌​;FIELD13;FIELD14;FIE‌​LD15;FIELD16;FIELD17‌​;FIELD18;FIELD19;FIE‌​LD20;FIELD21;FIELD22‌​;IT0006;IT0017;random information;IT0077;NaN;IT010‌​5;... 
FIELD1;FIELD2;FIELD3;FIELD4;FIELD5;;FIELD7;FIELD8;FIELD9;FIE‌​LD10;FIELD11;FIELD12‌​;FIELD13;FIELD14;FIE‌​LD15;FIELD16;FIELD17‌​;FIELD18;FIELD19;FIE‌​LD20;FIELD21;FIELD22‌​;IT0006;IT0017;random information;IT0077;NaN;IT010‌​5;... 
FIELD1;FIELD2;FIELD3;FIELD4;FIELD5;;FIELD7;FIELD8;FIELD9;FIE‌​LD10;FIELD11;FIELD12‌​;FIELD13;FIELD14;FIE‌​LD15;FIELD16;FIELD17‌​;FIELD18;FIELD19;FIE‌​LD20;FIELD21;FIELD22‌​;IT0006;IT0017;NaN;IT0077;NaN;IT010‌​5;... 
FIELD1;FIELD2;FIELD3;FIELD4;FIELD5;;FIELD7;FIELD8;FIELD9;FIE‌​LD10;FIELD11;FIELD12‌​;FIELD13;FIELD14;FIE‌​LD15;FIELD16;FIELD17‌​;FIELD18;FIELD19;FIE‌​LD20;FIELD21;FIELD22‌​;IT0006;IT0017;NaN;IT0077;NaN;IT010‌​5;... 

gibt es die gleiche Anzahl von Spalten ...

  • In der ersten Reihe, fügte ich IT0006;
  • in der zweiten Reihe, nie Spalte (das ist ein guter Fall)
  • In der dritten Zeile habe ich IT0006; IT0017; and NaN hinzugefügt (weil ich keine Informa habe tion und NaN   & hellip verwenden;)
  • in vierter hinzufügen Dieses IT0017; NaN

I-Lösung mit PHP und gute Arbeits:

<?php 
$sapFile = fopen("file.txt", "r") or die("Unable to open file!"); 
$typePers = array("Personale Viaggiante","Personale Interno"); 
$excludeFields = array("IT0006","IT0017","IT0077","Personale Viaggiante","Personale Interno","IT0105"); 
$emptyValue = "NaN"; 
$rowfinal = ""; 

// Output one line until end-of-file 
while(!feof($sapFile)) { 
    $row = explode(";",fgets($sapFile)); 
    $substring = "IT0006;IT0017;"; 
    $lstr = ""; 
    $rstr = ""; 
    $type = array_intersect($row, $typePers); 
    $keys = array_keys($type); 
    if($keys == null) $type = $emptyValue; 
    else $type = $row[$keys[0]]; 

    $j = 0; 
    for($i=0; $i<count($row); $i++){ 
     if(in_array($row[$i],$excludeFields)){ 
      unset($row[$i]); 
      $j++; 
     } 
    } 

    for($i=0; $i<22;$i++)$lstr .= $row[$i].";"; 

    foreach($row as $k => $v) 
     if($k > 22)if(!empty($v))$rstr .= $v.";"; 

    $rstr = substr($rstr,0,-1); 
    $substring .= $type; 
    $substring .= ";IT0077;NaN;IT0105;"; 
    $rowfinal .= $lstr.$substring.$rstr; 
} 
$file = 'test.txt'; 
// Write the contents back to the file 
file_put_contents($file, $rowfinal); 
fclose($sapFile); 
?> 


Am Ende ich Dateien in CSV exportieren müssen (Header-Spalte hinzufügen)

Können Sie mir helfen, in Powershell-Skript zu transformieren?

+0

Ich versuche klarer zu sein: Das ist richtig Fall: FIELD1; FIELD2; FIELD3; FIELD4; Field5 ;; Feld7; FIELD8; FIELD9; FIELD10; Field11; FIELD12; FIELD13; FIELD14; FIELD15; field16 FIELD17; FIELD18; FELD19; FIELD20; FIELD21; FELD22; IT0006; IT0017; Definierte_Informationen; IT0105 ... Aber ich kann es andere 3 Fälle haben: 1) H23 existiert aber nicht vorhanden H24 & H25 (In diesem Fall muss H25 gesetzt werden "NaN". 2) H23 nicht existiert, aber existiert H24 & H25 (in diesem Fall existiert sicherlich H24). 3) H23, H24 & H25 existiert nicht. Ich werde definitiv H22 Felder haben. Könnte den oberen 22 helfen ";" char .. – gaten

+1

Was hast du probiert? (Dies ist kein Code-Schreibdienst.) –

+0

Ich habe das Beispiel geändert ... – gaten

Antwort

3

Wenn Sie wissen, dass Sie nur diese Felder in dieser Reihenfolge vermissen, können Sie einfach replace operator mit regulären Ausdrücken (Lookbehind + Negative Lookahead) verwenden.

$text = Get-Content .\test.txt 
$text = $text -replace '(?<=City;;\d{4};)(?!IT0006)', 'IT0006;' 
$text = $text -replace '(?<=IT0006;)(?!IT0017)', 'IT0017;' 
$text = $text -replace '(?<=IT0017;)(?!XXXXX)', 'NaN;' 
Verwandte Themen