hotte001

skriptgesteuert Zeilen einer Datei ändern - - - P.S. Unter Linux - - -

Ich möchte mit Bezug auf die Einsprung Adresse (s.u.) in einer Datei
in einer/mehrerer Zeile/n mal den Wert1 löschen oder dazusetzen oder die Zeile so
belassen.
Gegeben sei eine Datei folgenden Aufbaus:

Einsprung Adresse
feste
Anzahl
von
Zeilen
bis
zur
nächsten
Einsprung Adresse

In einer festen Anzahl von Zeilen stehen kommaseparierte Werte
z.b { Wert1,Wert2,Wert3,Text1,Text2,Wert4,Zahl1 }
die aber nicht alle ausgefüllt sein müssen

Z.Bsp
Adresse 4711
{ Wert1,Wert2,Wert3,Text1,Text2,Wert4,Zahl1 }
{ Wert1,,Wert3,Text1,Text2,Wert4,Zahl1 }
{ ,Wert2,,Text1,,Wert4,Zahl1 }
{ ,Wert2,Wert3,Text1,Text2,Wert4,Zahl1 }
{ Wert1,Wert2,Wert3,,Text2,Wert4,Zahl1 }
{ Wert1,Wert2,Wert3,Text1,Text2,Wert4,Zahl1 }
{ ,Wert2,Wert3,,Text2,Wert4,Zahl1 }
{ ,Wert2,Wert3,Text1,Text2,Wert4, }
{ Wert1,Wert2,Wert3,Text1,Text2,,Zahl1 }
{ ,Wert2,,Text1,,Wert4,Zahl1 }
Adresse 4712
{ Wert1,Wert2,Text1,Text2,Wert4,Zahl1 }
{ Wert1,,Wert3,Text1,Text2,Wert4,Zahl1 }
{ ,,,Text1,,Wert4,Zahl1 }
{ ,,,Text1,Text2,Wert4,Zahl1 }
{ Wert1,,,,,Wert4,Zahl1 }
{ Wert1,Wert2,,,,Wert4,Zahl1 }
{ ,Wert2,Wert3,,Text2,Wert4,Zahl1 }
{ ,Wert2,Wert3,Text1,Text2,Wert4, }
{ Wert1,Wert2,Wert3,Text1,Text2,,Zahl1 }
{ ,Wert2,,Text1,,Wert4,Zahl1 }
usw

Meine Idee war die Adresse zu suchen und dann zeilenweise z.B in einer while schleife die Zeilen einlesen,
Bedingung prüfen (muss Wert1 gesetzt/gelöscht werden) , und die gewünschte Änderung Zeile ändern und/oder weiter zur nächsten Zeile.

Doch, mit welcher skriptsprache komme ich hier am besten zum Ziel,
und wie fange ich an?
Auf Facebook teilen
Auf X (Twitter) teilen
Auf Reddit teilen
Auf Linkedin teilen
Kommentar vom Moderator Biber am 01.07.2009 um 21:37:18 Uhr
Habe den Beitragstitel ergänzt.
Warum der Beitragsersteller selbst nach TzukiSans Kommentar nicht auf die Idee des "Editierens" kam entzieht sich meiner Kenntnis.

Content-ID: 119555

Url: https://administrator.de/forum/skriptgesteuert-zeilen-einer-datei-aendern-p-s-unter-linux-119555.html

Ausgedruckt am: 15.05.2025 um 19:05 Uhr

TsukiSan
TsukiSan 01.07.2009 um 19:33:24 Uhr
Goto Top
...auch ein fröhliches Hallo, hotte

in VB würde dies circa so aussehen
dim D as freefile
open "C:\Datei.???" for input as D  
while not eof(D)
Line Input ' D , AdrTemp$  
if AdrTemp$ = "4712" then  
 input # D , StrTemp1$, StrTemp2$,StrTemp3$,StrTemp4$,StrTemp5$,StrTemp6$
select case "Wasauchimmer"  
case StrTemp1$
  'irgendwas machen  
case StrTemp2$
 'irgendwas machen  
case StrTemp3$
  'irgendwas machen  
'usw.  
end select
end if
wend
close

Soweit zu VB.
Ich denke aber, daß geht auch mit scripten. Aber da sind andere Experten gefragt.

Gruß
Tsuki
hotte001
hotte001 01.07.2009 um 20:14:41 Uhr
Goto Top
Ups - dabei fällt mir gerade auf, ich vergass zu sagen, dass ich dies unter Linux machen will.
Also eher bash, perl, oder so ähnlich.

hotte
TsukiSan
TsukiSan 01.07.2009 um 20:33:05 Uhr
Goto Top
Na dann auch ein Ups face-smile

Gruß
Tsuki
68162
68162 02.07.2009 um 06:59:35 Uhr
Goto Top
In PERL oder so gibt's sicher bessere Lösungen, aber da ich das nicht kann als Shellscript-Gedanken-Experiment:
Mit "grep" kannst Du z.B. nach "Adresse 4712" suchen; es gibt Dir weiterhin die Möglichkeit eine danach folgende feste Zeilenanzahl auszugeben (egal ob in TEMP-Datei, Bildschirm, Pipe).
Das dann weiter verarbeiten via "sed" oder zeilenweise "for each in x".
Den Textfetzen dann wieder via "sed" ins Original einfügen.

MfG, FM_81