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

Verschiedene werte Suchen und mit einen Fixwert Erweitern- BATCH

Frage Entwicklung Batch & Shell

Mitglied: kalle00

kalle00 (Level 1) - Jetzt verbinden

25.01.2011, aktualisiert 15:49 Uhr, 2971 Aufrufe, 16 Kommentare

Hallöchen, ich bräuchteein bisschen hilfe mit Suchen & Ersetzen, auf eine etwas andere art...

Ich habe eine Textdatei mit Folgenden Inhalt

Blub 20.008,50
Blub 510,-582
Blub 14,1.5
Blub -88,95



Blub [ZAHL],[ZAHL2]


usw.usf
und am ende soll die Datei folgendermaßen aussehen:

qweasd Q20.008,K50,ppp
qweasd Q510,K-582,ppp
qweasd Q14,K1.5,ppp
qweasd Q-88,K95,ppp


qweasd Q[ZAHL],K[ZAHL2],[EXTRA WERT]


Zur Zeit habe ich es soweit das das Blub in das qweasd umgewandelt wird, jedoch ist mein Problem nun das ich nicht nach den zahlen suchen kann und das Q und das K einfach davorsetzen kann. Vor die 1. Zahl soll IMMER das Q egal ob die zahl posetiv oder negativ ist. Und vor die 2. Zahl immer der K. Und als letztes soll überall ",ppp" angehängt werden.

nun meine frage: Ist dies umsetzbar in batch? mit "einer" einfach schleife, wonach ich einfach nach "den zahlen" suchen kann (nach dem Blub bzw. qweasd ist IMMER ein "blank" nach der 1. Zahl immer 1 "," (komma).
Denn für JEDE zahl eine extra schleife zu erstellen ist zwar theoretisch machbar, aber praktisch nicht umsetzbar, da es keine ahnung wieviele verschiedene zahlen sind

- denn per sufu habe ich nur "einfaches" suchen und ersetzen gefunden, aber nichts womit man mach [Arrays] sozusagen sucht.

Mit freundlichen Grüßen Maik aka Kalle

Schonmal Danke im Vorraus und ich hoffe es ist verständlich!
Mitglied: bastla
25.01.2011 um 17:00 Uhr
Hallo kalle00und willkommen im Forum!

Wenn, so wie ich das derzeit interpretiere, jede Zeile der Ausgangsdatei umzuwandeln ist, dann etwa so:
01.
@echo off & setlocal 
02.
set "Alt=D:\Alt.txt" 
03.
set "Neu=D:\Neu.txt" 
04.
 
05.
del "%Neu%" 2>nul 
06.
for /f "usebackq tokens=1-3 delims=, " %%a in ("%Alt%") do >>"%Neu%" echo qweasd Q%%b,K%%c,ppp
Wenn es allerdings so gemeint wäre, dass nur Zeilen, die mit "Blub " beginnen, verarbeitet werden sollen, stellt sich die Frage nach den übrigen (und ev auch leeren) Zeilen der Quelldatei ...

Grüße
bastla
Bitte warten ..
Mitglied: kalle00
25.01.2011 um 18:21 Uhr
Vielen herzlichen dank für die Antwort!

und es ist so wie du unten beschrieben hast (wusst ichs doch das ich nicht alles beschrieben hatte), es sollen nur bestimmte zeilen umgewandelt werden, also z.B. nur die die mit Blub beginnen, Leerezeilen sind nicht vorhanden, aber noch andere zeilen diese beginnen anders.
(ausschnitt aus ausgangscode)
01.
ma 20,10 
02.
da 100,10 
03.
ma 110,10 
04.
es -10,10,90,180 
05.
ma 110,20 
06.
da 110,60 
07.
ma 110,70

Blub war in disem falle ma.
Es sollen die ma, da, es etc. umgewandelt werden in das entsprechende qweasd für ma, abc für da usw.
- wobei das da am Ende genauso aussieht wie das ma (Blub) halt nur ohne ppp

Danke, Kalle


p.s. wie mache ich hier etwas in die "codeboxen"???

---> danke , ... wenn man hoch Scrollt sieht man auch Fromatierungshilfe *lach*
Bitte warten ..
Mitglied: Biber
25.01.2011 um 18:28 Uhr
[OT]
Moin kalle00,

willkommen im Forum.
Zitat von kalle00:
p.s. wie mache ich hier etwas in die "codeboxen"???
Ich gehöre ja nicht zu kalauerfeindlichen Moderatoren hier, aber...
... wenn ich lese, dass ein neuer Nick namens kalle00 in meinen Bereichen etwas in die codeboxen machen will...

Wenn du einen Beitrag/Kommentar eingibst, wird dir in diesem Eingabefenster ein zusätzlicher Popup-Link "Formatierungshilfe" angeboten.
Dort findest du unter anderem auch die so genannte Codeformatierung.

Grüße
Biber
[/OT]
Bitte warten ..
Mitglied: bastla
25.01.2011 um 19:00 Uhr
Hallo kalle00!

Dann muss ich alleredings nochmals nachhaken: Sollen die "ma" und "da" gleich verarbeitet werden, und für die "es" (hier folgen ja 4 Zahlenwerte) gibt es andere Vorschriften [Edit] ... wohl nicht, anstelle von "da" soll ja "abc" verwendet werden ... [/Edit]? Gibt es vielleicht auch noch ganz andere Zeilen, die einfach nur unverändert "mitgenommen" werden sollen?

Vielleicht könntest Du das nochmals anhand einer "Vorher / Nachher"-Gegenüberstellung deutlich machen ...

Grüße
bastla
Bitte warten ..
Mitglied: kalle00
25.01.2011 um 19:23 Uhr
Hallo bastla,

Zeilen welche unverändert mitgenommen werden, gibt es keine! Es gibt aber ein par zeilen welche Rausgelöscht werden, dies habe ich aber schon Eingebaut.
Zwecks dem ES dies wird später ganz anderst aussehen! - genauers kann ich jetzt gerade nicht sagen, muss Morgen erst nochmal nachschauen.

Also dieses hier von dir:

01.
@echo off & setlocal 
02.
set "Alt=D:\Alt.txt" 
03.
set "Neu=D:\Neu.txt" 
04.
 
05.
del "%Neu%" 2>nul 
06.
for /f "usebackq tokens=1-3 delims=, " %%a in ("%Alt%") do >>"%Neu%" echo qweasd Q%%b,K%%c,ppp
Funktioniert, nur wenn man noch irgendwie etwas Einbauen damit nur die Zeilen mit z.B. "ma" bearbeitet werden wär es perfekt.

Es muss NICHT alles in einer For-schleife abgearbeitet werden, es reicht wenn eine Schleife halt nur die zeilen mit "ma" bearbeitet. Diese könnte man dann ja einfach mehrfach laufen lassen, entsprechend abgeändert. Ich hatte ja schon etwas womit ich explizit die "ma" Ersetzen kann, jedoch kam ich damit nicht weiter um die zahlen zu Erweitern.

Zwecks beispiel:
Vorher:
01.
ma 20,10 
02.
da 100,10 
03.
ma 110,10 
04.
es -10,10,90,180 
05.
ma 110,20 
06.
da 110,60 
07.
ma 110,70
Nachher:
01.
qweasd Q20,K10,ppp 
02.
abc Q100,K10 
03.
qweasd Q110,K10,ppp 
04.
//es wird später anders aussehen, wie genau kann ich jetzt im augenblick nicht genau sagen  // 
05.
qweasd Q110,K20,ppp 
06.
abc Q110,K60 
07.
qweasd Q110,K70,ppp
Grüße, Kalle
Bitte warten ..
Mitglied: Friemler
25.01.2011 um 19:59 Uhr
Hallo Kalle,

Versuche mal folgendes Skript:
01.
@echo off 
02.
 
03.
setlocal enabledelayedexpansion 
04.
 
05.
 
06.
set "Words=ma da" 
07.
set "Substitutes=qweased abc" 
08.
set "Add=1 0" 
09.
set "AddStr=ppp" 
10.
 
11.
set "InputFile=input.txt" 
12.
set "OutputFile=CON" 
13.
 
14.
 
15.
type NUL > "%OutputFile%" 
16.
 
17.
for %%w in (%Words%) do ( 
18.
  for /f "tokens=1*" %%s in ("!Substitutes!") do ( 
19.
    set "Word_%%w=%%s" 
20.
    set "Substitutes=%%t" 
21.
22.
 
23.
  for /f "tokens=1*" %%a in ("!Add!") do ( 
24.
    if "%%a" equ "0" set "Add_%%w= " 
25.
    if "%%a" equ "1" set "Add_%%w=%AddStr%" 
26.
    set "Add=%%b" 
27.
28.
29.
 
30.
for /f "usebackq tokens=1-3 delims=, " %%a in ("%InputFile%") do ( 
31.
  for %%w in (%Words%) do ( 
32.
    if "%%a" equ "%%w" ( 
33.
      for /f "tokens=2 delims==" %%s in ('set Word_ ^| find "_%%w="') do ( 
34.
        for /f "tokens=2 delims==" %%x in ('set Add_ ^| find "_%%w="') do ( 
35.
          if "%%x" neq " " ( 
36.
            >>"%OutputFile%" echo %%s Q%%b,K%%c,%%x 
37.
          ) else ( 
38.
            >>"%OutputFile%" echo %%s Q%%b,K%%c 
39.
40.
41.
42.
43.
44.
)
Die Variablen Words, Substitutes, Add und AddStr in den Zeilen 6 bis 9 musst Du anpassen, und zwar nach folgender Regel: In der Reihenfolge, in der Du die zu ersetzenden Wörter in die Variable Words einträgst, musst Du auch die Wörter, durch die sie ersetzt werden sollen in die Variable Substitutes eintragen. Für jedes Wort, bei dem in der Ausgabedatei am Zeilenende ppp (oder ein anderes Wort, siehe Variable AddStr) erscheinen soll, musst Du in der Variablen Add eine 1 eintragen, sonst eine 0. Die Reihenfolge der 1 und 0 muss auch wieder mit der Reihenfolge der Wörter in Words korrespondieren.

Ich hoffe das war verständlich.

Über die Variablen InputFile und OutputFile werden die Ein- und Ausgabedateien bestimmt. Ausgabedatei=CON => Ausgabe auf den Schirm

Um für jedes Wort in Words eine individuelle Erweiterung (statt ppp) zu definieren, müssen nur kleine Änderungen vorgenommen werden. Sag' dann Bescheid.


Gruß
Friemler
Bitte warten ..
Mitglied: bastla
25.01.2011 um 20:34 Uhr
Hallo kalle00!

Dann etwa so:
01.
@echo off & setlocal 
02.
set "Alt=D:\Alt.txt" 
03.
set "Neu=D:\Neu.txt" 
04.
 
05.
del "%Neu%" 2>nul 
06.
for /f "usebackq delims=" %%i in ("%Alt%") do ( 
07.
    for /f "tokens=1-3 delims=, " %%a in ("%%i") do ( 
08.
        set "Done=" 
09.
        if "%%a"=="ma" echo qweasd Q%%b,K%%c,ppp & set "Done=true" 
10.
        if "%%a"=="da" echo abc Q%%b,K%%c & set "Done=true" 
11.
        if not defined Done echo %%i 
12.
13.
)>>"%Neu%"
Grüße
bastla

[Edit] Wie habe ich mir denn diese Verspätung eingehandelt? [/Edit]
Bitte warten ..
Mitglied: kalle00
25.01.2011 um 20:54 Uhr
Vielen herzlichen Dank!

Das hilft um längen weiter.
Hatte kurz bevor du dies gepostet hattest einen kleinen Gedankenblitz wie ich es hätte vielleicht auch lösen können, hätte aber bis spät in die nacht gesessen *lach*.
Zwecks der individuellen erweiterung das wird verraussichtlich bei den "ES" dann sein aber da muss ich mir erstmal überlegen wie die am Ende genau aussehen sollen. Werde mich vorraussichtlich die tage nochmal melden falls ich hänge.

- Beitrage als gelöst werde ich noch nicht markieren, da die "ES" noch im raum stehen

Vielen dank Euch 2 für eure Hilfe.

Würd euch ja gern aufn Feierabendbierchen einladen, aber ich glaube ihr seid ein bisschen weit weg .

Danke, Kalle
Bitte warten ..
Mitglied: Friemler
25.01.2011 um 21:03 Uhr
Hallo Kalle,

ich stoße trotzdem mal mit Dir an : 289ac0449deb817ce2cbe7839797d03a - Klicke auf das Bild, um es zu vergrößern

Gruß
Friemler
Bitte warten ..
Mitglied: kalle00
25.01.2011 um 21:07 Uhr
*hihi*
Habe deins auch noch getestet.
Klappt auch einmandfrei! Und ist für mich auf die schneller sogar verständlicher als das vom Friemler ;). Zwecks den ES habe ich eben schon mein schwerpunkt gefunden, aber für mich reicht es heute! Ich mach Feierabend!!!

Naja schönen Abend, noch und nochmals Besten Dank!

Gruß Kalle
Bitte warten ..
Mitglied: kalle00
21.02.2011 um 14:21 Uhr
Soha, erstmal sorry das ich mich so Spät wieder melde, jedoch hatte Ich ein par Probleme.
Nun habe ich Erfahren das sich etwas geändert hat, und mir dadruch einen großen Strich durch die Rechnung macht.
Und zwar das ES...

Ausgangscode:
Code1:
01.
ma 2,0 
02.
da 2,16 
03.
da 6,16 
04.
ma 6,12 
05.
es -4,4,0,90 
06.
ma 10,12 
07.
da 10,4 
08.
ma 6,4 
09.
es 4,4,270,360 
10.
ma 6,0 
11.
da 2,0
Zum einen nach jeden es eine extra zeile welche den wert lll enthält
(hatte schon etwas per sufu gefunden gehabt, jedoch waren dort die gesamte zeile immer gleich, und bei mir nur ja der Zeilenanfang.)
Code2 (Musterergebniss).Schritt1
01.
qweasd  2,0,ppp 
02.
abc 2,16 
03.
abc 6,16 
04.
qweasd  6,12,ppp 
05.
es -4,4,0,90 
06.
lll 
07.
ma 10,12 
08.
abc 10,4 
09.
qweasd  6,4,ppp 
10.
es 4,4,270,360 
11.
lll 
12.
qweasd  6,0,ppp 
13.
abc 2,0

Code2 (Musterergebniss).Schritt2
Und das 2. was gemacht werden muss, ist die ES umwandeln in T51 bzw. T52 dies ist abhängig von der 1. bzw. 2. zahl nach den es, wenn ein - (minus) vor der Zahl ist, dann muss T51 stehen ansonsten T52

01.
qweasd  2,0,ppp 
02.
abc 2,16 
03.
abc 6,16 
04.
qweasd  6,12,ppp 
05.
T51 -4,4,0,90 
06.
lll 
07.
qweasd 10,12,ppp 
08.
abc 10,4 
09.
qweasd  6,4,ppp 
10.
T52 4,4,270,360 
11.
lll 
12.
qweasd  6,0,ppp 
13.
abc 2,0
p.s es können ruhig beide Schritte mit einmal abgearbeitet werden wenn dies mäglich ist, ansonsten auf mehreren durchläufen, dies ist egal.

- Schonmal Danke im voraus

Gruß Kalle.
Bitte warten ..
Mitglied: bastla
21.02.2011 um 17:27 Uhr
Hallo kalle00!

Versuch es damit:
01.
@echo off & setlocal 
02.
set "Alt=D:\Alt.txt" 
03.
set "Neu=D:\Neu.txt" 
04.
 
05.
del "%Neu%" 2>nul 
06.
for /f "usebackq delims=" %%i in ("%Alt%") do ( 
07.
    for /f "tokens=1-5 delims=, " %%a in ("%%i") do ( 
08.
        set "Done=" 
09.
        if "%%a"=="ma" echo qweasd %%b,%%c,ppp & set "Done=true" 
10.
        if "%%a"=="da" echo abc %%b,%%c & set "Done=true" 
11.
	if "%%a"=="es" ( 
12.
	    if %%b lss 0 (echo T51 %%b,%%c,%%d,%%e) else (echo T52 %%b,%%c,%%d,%%e) 
13.
            echo lll 
14.
            set Done=True 
15.
16.
        if not defined Done echo %%i 
17.
18.
)>>"%Neu%"
Grüße
bastla
Bitte warten ..
Mitglied: Friemler
21.02.2011 um 17:31 Uhr
Hallo Kalle,

bastla's Script lässt sich sehr leicht an Deine neuen Wünsche anpassen.

Zeile 7 muss lauten:
for /f "tokens=1-5 delims=, " %%a in ("%%i") do (
Hinter Zeile 10 (als neue Zeile 11) muss folgendes eingefügt werden:
if "%%a"=="es" (if %%b lss 0 (echo T51 %%b,%%c,%%d,%%e) else (echo T52 %%b,%%c,%%d,%%e)) & (echo lll) & set "Done=true"
Weitere Änderungen solltest Du eigentlich selbst hin bekommen .

[EDIT]
Oh, zu spät!
[/EDIT]

Gruß
Friemler
Bitte warten ..
Mitglied: bastla
21.02.2011 um 17:43 Uhr
@Friemler
Passt so stilistisch besser als mein Zusatz ...

Grüße
bastla
Bitte warten ..
Mitglied: Biber
21.02.2011 um 17:53 Uhr
[OT]
@bastla, @Friemler
Eigentlich vermisse ich -ebenfalls stilistisch- den dezenten Hinweis:
"Hey, wieso hast du nicht vor einem Monat schon gesagt, dass du unsere Ausführungen weder gelesen noch verstanden hast?"

@kalle00
Dieser feedbacklose Beitrag steht schon ein paar Tage auf meiner Beobachtungsliste.
Und er steht nur deshalb nicht bis zu den Knöcheln im Kompost, weil er IMHO auch ohne (d)ein Feedback durchaus hilfreich für einige MitleserInnen sein kann.

Ich bitte dich dennoch, dieses Mal dranzubleiben, bis auch die Verständisfragen geklärt sind und den Beitrag dann auch als "erledigt" zu kennzeichnen.

Beim Thema "nur mal schnell ein Copy&Paste als eigene Leistung ausgeben" - Ja Hey! Heisst du etwa auch "Kalle von und zu Irgendwas"??.
Na also...

Grüße
Biber
[/OT]
Bitte warten ..
Mitglied: kalle00
21.02.2011 um 18:19 Uhr
Ersteinmal Danke für die Antwort.
Dann Entschuldigung das ich im Krankenhaus lag und kein Feedback geben konnte.
Zwecks nicht verstehen, dies war am anfang zum Teil so, aber mittlerweile geht es und einfaches Copy&Past tue ich auch nicht. Zum einen hatder Lösungvorschlag vom Friemler mir bei mein ersten Problem geholfen. Und zum anderen steht der Thread u.a. auch in meiner Qulle drinn. Dies ist nun aber dahinngestellt.

Nochmals Danke & Gruß Kalle

p.s. werde vorraussichtich spätestens Freitag den Thread als gelöst makieren.
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
XML
gelöst XML - XSLT Formatierung mehrere verschiedene Werte (13)

Frage von chrisen zum Thema XML ...

Batch & Shell
gelöst Suchen und Ersetzen mehrerer Suchbegriffe per Batch (4)

Frage von makroll10 zum Thema Batch & Shell ...

Batch & Shell
gelöst Powershell: Suchen und dynamisch erweitern (2)

Frage von rkrausby zum Thema Batch & Shell ...

Batch & Shell
gelöst Per Batch Konfliktdateien in Dropbox suchen (4)

Frage von nobbi49 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Windows 7
Verteillösung für IT-Raum benötigt (12)

Frage von TheM-Man zum Thema Windows 7 ...