Hole ein Element in einer CSV-Datei, mache eine Ganzzahl und füge es am Anfang der Zeile ein

463
Yambotron

Ich habe eine CSV mit Hunderten von Einträgen und versuche folgendes zu tun:

 1. Get the first element (decimal number, ex: 1.01) 2. Remove the decimal part of the element (ex: 1) 3. Add the new number to the beginning of the file 

Beispieleingabe:

"1.01","China Town Grocery","OE" 

Folgendes brauche ich als Ausgabe:

"1","1.01","China Town Grocery","OE" 

Im Moment habe ich den folgenden Befehl für / do über die Befehlszeile verwendet:

for /f "tokens=*" %a in (input.txt) do (echo "input.txt[0]",%a) >> output.txt 

Ich weiß, ich muss das ändern, was ich erklinge. Aber ich weiß nicht, wie ich diesen Wert nutzen kann. Was vermisse ich? Danke im Voraus.

0
Mein Fehler. Entfernt es Yambotron vor 6 Jahren 0

2 Antworten auf die Frage

1
Worthwelle

Obwohl Sie dies als markiert haben, sieht dies tatsächlich wie ein Windows- .

Sie können in einer einzelnen Zeile nicht das tun, was Sie möchten. Daher müssen Sie eine Batch-Datei erstellen.

Hier ist die Batchdatei, die ich mir ausgedacht habe:

@ECHO off SETLOCAL EnableDelayedExpansion for /f "tokens=*" %%a in (input.txt) do ( CALL :GetNumber %%a echo "!num!",%%a ) >> output.txt  :GetNumber for /f "tokens=1 delims=." %%a in (%1) do ( set "num=%%a" ) 

Fügen Sie diesen Code ein filename.batund führen Sie ihn in demselben Verzeichnis wie Ihre input.txtDatei aus.

Dies bewirkt mehrere Dinge:

  1. Aktiviert die verzögerte Erweiterung, um eine variable Verarbeitung innerhalb der FORSchleife zu ermöglichen.
  2. Verwendet eine Subroutine, um die aktuelle Zeile zu verarbeiten
  3. Setzen Sie eine Umgebungsvariable auf die Nummer, nach der Sie suchen (da Batch keine Funktionen mit systemeigenen returnAnweisungen hat)
  4. Geben Sie die Zeile wie gewünscht aus.
Nett. Als * Nix-Hacker machen Batch-Skripts meine Augen wirklich zum Jucken. glenn jackman vor 6 Jahren 1
1
HelpingHand

Wenn PowerShell eine Option ist:

Import-CSV "input.txt" -Header A,B,C | select-object New,A,B,C | ForEach-Object { $_.New = [math]::Floor($_.A); return $_ } | Export-CSV -Path output.txt -NoTypeInformation