2017-03-05 6 views
-1

Ich brauche Hilfe. Ich muss Spalten .txt mit Batch-Datei zählen. Die Spalten sind durch "|" Ich versuche dies:Graf Spalten in der Datei

@echo off 

set file=C:\Users\Documents\test\days.txt 

for /F "delims==|" %%a in ('type "%file%" ^|find "" /v /c') do set contColumns=%%a  

echo This file %file% have %contColumns% columns. 

PAUSE 
+0

Es würde uns helfen, hatten wir Details der Eingabedateien. Sind auch die Anzahl der Spalten in jeder Zeile gleich? _Lesen nur in der ersten Zeile ist besser als das Lesen von all_. – Compo

Antwort

2

Im Folgenden wird die Anzahl der | begrenzt Spalten berechnen in der ersten Zeile der Datei gefunden. Dies funktioniert nur, wenn die Zeilenlänge < = 1021 ist, und die Zeilen sind Windows-Format (mit \ r \ n abgeschlossen), nicht Unix-Format (mit \ n beendet).

@echo off 
setlocal enableDelayedExpansion 
set "file=C:\Users\Documents\test\days.txt" 

:: Read the first line 
set "ln=" 
<"%file%" set /p "ln=" 

:: Convert columns into lines by substituting .\n. for every | 
if defined ln set ^"ln=.!ln:^|=.^ 
%= This equates to a newline (\n) character =% 
.!^" 

:: Count the number of lines and store the result 
for /f %%N in ('cmd /v:on /c echo(^^!ln^^!^|find /c /v ""') do set "cnt=%%N" 

echo line 1 column count = %cnt% 

Wenn Linien 1021 überschreiten kann oder nicht durch \ r \ n beendet, sind aber < 8191, dann

@echo off 
setlocal disableDelayedExpansion 
set "file=C:\Users\Documents\test\days.txt" 

:: Read the first line 
for /f usebackq^ delims^=^ eol^= %%A in ("%file%") do (
    set "ln=%%A" 
    goto :endLoop 
) 
:endLoop 

:: Convert columns into lines by substituting .\n. for every | 
setlocal enableDelayedExpansion 
if defined ln set ^"ln=.!ln:^|=.^ 
%= This equates to a newline (\n) character =% 
.!^" 

:: Count the number of lines and store the result 
for /f %%N in ('cmd /v:on /c echo(^^!ln^^!^|find /c /v ""') do set "cnt=%%N" 

echo line 1 column count = %cnt% 
0
@ECHO OFF 
SETLOCAL 
SET "sourcedir=U:\sourcedir" 
SET "filename1=%sourcedir%\q426111659.txt" 

:: get first line 
SET /p line=<"%filename1%" 

:: remove all spaces, commas and semicolons 
SET "line=%line: =%" 
SET "line=%line:,=%" 
SET "line=%line:;=%" 
:: convert all pipes to spaces and count 
SET /a count=0 
FOR %%a IN (%line:|= %) DO SET /a count+=1 

ECHO %count% columns IN file 


GOTO :EOF 

Sie müssten die Einstellung von sourcedir ändern, um Ihre anpassen Umstände.

Ich habe eine Datei mit dem Namen q426111659.txt mit einigen Dummy-Daten für meine Tests verwendet.

Lesen Sie die erste Zeile der Datei in line.

Ersetzen Sie alle Leerzeichen, Kommata und Semikola in der Zeile mit nichts. Theoretisch müssten Sie Tab auch ersetzen müssen - die Formel set "varname=%varname:replacethis=withthis%"

Schließlich ist jedes Rohr mit einem Leerzeichen ersetzen und die sich ergebende Anzahl von Token zählen.