hotte001
Goto Top

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?
Kommentar vom Moderator Biber am Jul 01, 2009 um 19: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-Key: 119555

Url: https://administrator.de/contentid/119555

Printed on: April 24, 2024 at 14:04 o'clock

Member: TsukiSan
TsukiSan Jul 01, 2009 at 17:33:24 (UTC)
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
Member: hotte001
hotte001 Jul 01, 2009 at 18:14:41 (UTC)
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
Member: TsukiSan
TsukiSan Jul 01, 2009 at 18:33:05 (UTC)
Goto Top
Na dann auch ein Ups face-smile

Gruß
Tsuki
Mitglied: 68162
68162 Jul 02, 2009 at 04:59:35 (UTC)
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