Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Durch Leerzeichen getrennte Wörter Filtern

Frage Entwicklung Batch & Shell

Mitglied: Mario.Steinberg

Mario.Steinberg (Level 1) - Jetzt verbinden

28.05.2010 um 11:00 Uhr, 2566 Aufrufe, 5 Kommentare

Hallo,

ich hoffe mir kann jemand weiterhelfen. Ich habe mit den Infos aus dem Forum schon mal etwas rumprobiert aber noch zu keiner guten Lösung gekommen.

Ich habe eine Datei mit folgendem Aufbau

01.
               848      820 harry        Src\Forms\obj\Release\res_1.resources 
02.
               848      820 harry        Src\Forms\obj\Release\res_2.resources 
03.
M              848      822 stefan       Src\Forms\obj\Release\res_3.cache 
04.
               848      820 harry        Src\Forms\obj\Release\res_4.resources 
05.
               848      820 harry        Src\Forms\obj\Release\res_5.resources
wobei das M tatsächlich auch da ist.

Nun würde ich die Informationen gerne in eine neue Datei schreiben, die dann in etwa so aussehen soll.

01.
   Repository revision:	820 	Src\Forms\obj\Release\res_1.resources 
02.
   Repository revision:	820 	Src\Forms\obj\Release\res_2.resources 
03.
   Repository revision:	822  	Src\Forms\obj\Release\res_3.cache 
04.
   Repository revision:	820 	Src\Forms\obj\Release\res_4.resources 
05.
   Repository revision:	820 	Src\Forms\obj\Release\res_5.resources
Weiß jemand Rat?

Danke und Gruß,
Mario
Mitglied: TsukiSan
28.05.2010 um 11:14 Uhr
Hallo Mario,

gesetz dem Fall, dein Dateiaufbau ist immer so und es gibt nur so ein vereinsamtes "M", dann
könnte dir dieses Schnipsel in VBS eventuell weiterhelfen:
01.
Set FSO = CreateObject("Scripting.FileSystemObject") 
02.
Set MeineDatei = FSO.OpenTextFile("D:\3\Test.txt", 1) 
03.
MeineDateiNeu = MeineDatei.ReadAll 
04.
MeineDateiNeu = Replace (MeineDateiNeu, "M              848" , "               Repository revision:") 
05.
MeineDateiNeu = Replace (MeineDateiNeu, "848" , "Repository revision:") 
06.
MeineDatei.Close 
07.
Set MeineDatei = FSO.CreateTextFile("D:\3\Test1.txt", True) 
08.
With MeineDatei 
09.
	.Write (MeineDateiNeu) 
10.
	.Close 
11.
End With
Gruss
Tsuki
[Edit]
Bitte bei dem Schnipsel noch den Pfad und Dateinamen anpassen
[/Edit]
Bitte warten ..
Mitglied: LotPings
28.05.2010 um 11:17 Uhr
Hallo Mario,

die genauen Offset,Länge Werte und Anzahl Leerzeichen musst du dir selber raussuchen.

01.
@Echo off&Setlocal 
02.
Set InFile=D:\Test\test1.txt 
03.
Set OutFile=D:\test\Test2.txt 
04.
For /F "delims=" %%A in (%InFile%) do Set "Line=%%A" & Call :ProcLine 
05.
Goto :Eof 
06.
:ProcLine 
07.
>> %OutFile% Echo.   Reposi... %Line:~25,3%  %Line:~41%
Aber du kannst ja zählen/ablesen
         1         2         3         4         5         6         7         8       
12345678901234567890123456789012345678901234567890123456789012345678901234567890 
               848      820 harry        Src\Forms\obj\Release\res_1.resources 
               848      820 harry        Src\Forms\obj\Release\res_2.resources 
M              848      822 stefan       Src\Forms\obj\Release\res_3.cache 
               848      820 harry        Src\Forms\obj\Release\res_4.resources 
               848      820 harry        Src\Forms\obj\Release\res_5.resources 
                
         1         2         3         4         5         6         7         8       
12345678901234567890123456789012345678901234567890123456789012345678901234567890 
   Repository revision:	820 	Src\Forms\obj\Release\res_1.resources 
   Repository revision:	820 	Src\Forms\obj\Release\res_2.resources 
   Repository revision:	822  	Src\Forms\obj\Release\res_3.cache 
   Repository revision:	820 	Src\Forms\obj\Release\res_4.resources 
   Repository revision:	820 	Src\Forms\obj\Release\res_5.resources
Gruß
LotPings
Bitte warten ..
Mitglied: Mario.Steinberg
28.05.2010 um 12:44 Uhr
Wow, danke für die schnellen Antworten.

ich habe mich für die Variante von LotPings entschieden

01.
For /F "delims=" %%A in (%VDD_TEMP%) do Set "Line=%%A" & Call :ProcLine  
02.
Goto :Eof  
03.
:ProcLine  
04.
>> %VDD_FILE% Echo.   Repository revision: %Line:~25,3%  %Line:~41% 
05.
:Eof 
Was genau macht Goto :Eof ? Musste ich das Label tatsächlich noch ergenzen?

Ich habe folgendes geschrieben:

01.
For /F "delims=" %%A in (%VDD_TEMP%) do Set "Line=%%A" & Call :ProcLine  
02.
Goto :Eof  
03.
:ProcLine  
04.
>> %VDD_FILE% Echo.   Repository revision: %Line:~25,3%  %Line:~41% 
05.
:Eof  
06.
 
07.
rm %VDD_TEMP%
Es scheint als ob das rm jetzt in der Schleife aufgerufen wird!??

Gibt es eine Möglichkeit den Ausdruck ohne die Funktion :ProcLine zu schreiben z.B.

01.
For /F "delims=" %%A in (%VDD_TEMP%) do ( 
02.
   Set "Line=%%A" & Call :ProcLine  
03.
   >> %VDD_FILE% Echo.   Repository revision: %Line:~25,3%  %Line:~41% 
04.
05.
 
06.
rm %VDD_TEMP%
Würde auch

01.
echo Repository revision: %Line:~25,3%  %Line:~41% >> %VDD_FILE%
funktionieren?

Was macht der . hinter Echo?

Danke und Gruß,
Mario
Bitte warten ..
Mitglied: Mario.Steinberg
28.05.2010 um 13:37 Uhr
So gehts:

For /F "delims=" %%A in (%VDD_TEMP%) do (
set "Line=%%A"
echo Repository revision: !Line:~23,4! !Line:~40! >> %VDD_FILE% 2<&1
)

rm %VDD_TEMP%
Bitte warten ..
Mitglied: LotPings
28.05.2010 um 13:56 Uhr
Zitat von Mario.Steinberg:
Was genau macht Goto :Eof ? Musste ich das Label tatsächlich noch ergenzen?
Nein :Eof ist ein Standardmäßig gesetzter Label für End of File.
Ein goto :Eof (!wichtig! mit Doppelpunkt) bewirkt einen Rücksprung aus einer Sub oder das Ende des Hauptteils.
Es verhindert hier das der Haupteil in die Sub durchläuft.


Ich habe folgendes geschrieben:

01.
> For /F "delims=" %%A in (%VDD_TEMP%) do Set "Line=%%A" & Call :ProcLine  
02.
> Goto :Eof  
03.
> :ProcLine  
04.
> >> %VDD_FILE% Echo.   Repository revision: %Line:~25,3%  %Line:~41% 
05.
> :Eof  
06.
>  
07.
> rm %VDD_TEMP% 
08.
> 
Es scheint als ob das rm jetzt in der Schleife aufgerufen wird!??
Ja, ein Label wird nur als Ansprungmarke benutzt, und hat sonst keine Funktion.
(Es wird mit :: auch häufig als Kommentar "missbraucht" )

Gibt es eine Möglichkeit den Ausdruck ohne die Funktion :ProcLine zu schreiben z.B.

Ja, hast du ja schon herausgefunden. Du brauchst dafür Setlocal EnableldelayedExpansion und bekommst ggfs. mit Ausrufezeichen im Text Probleme.

Würde auch
01.
> echo Repository revision: %Line:~25,3%  %Line:~41% >> %VDD_FILE% 
02.
> 
funktionieren?
JA, aber nur innerhalb der Schleife oder innerhalb einer von dort aufgerufenen Sub, da sich der Wert ja mit jeder Zeile der gelesenen Datei ändert.
Was macht der . hinter Echo?
Das ist nur ein alternativer Befehlstrenner (statt Leerzeichen gehen auch .,;;\/ und soll das Zählen der Leerzeichen erleichtern, da der Trenner ja nicht mitgezählt wird.

Gruß
LotPings
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Datenbanken
Access Checkbox mit Kombifeld und dann filtern

Frage von atomas42 zum Thema Datenbanken ...

Microsoft Office
gelöst Dropdownlisten in Abhängigkeit mit Leerzeichen im Namen (Datenüberprüfung) (2)

Frage von kevische zum Thema Microsoft Office ...

Administrator.de Feedback
Bug? "m f g" (ohne Leerzeichen) wird auch in URL ersetzt (5)

Frage von emeriks zum Thema Administrator.de Feedback ...

Netzwerke
Getrennte Netze durch VLAn realisieren (15)

Frage von fritte87 zum Thema Netzwerke ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (20)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Festplatten, SSD, Raid
M.2 SSD wird nicht erkannt (14)

Frage von uridium69 zum Thema Festplatten, SSD, Raid ...