Array, Zeilennummer auslesen
mmueller
- perl
0 ritschmanhard0 mmueller0 mmueller0 ritschmanhard0 Struppi
0 Struppi
0 mmueller
0 Siechfred0 mmueller0 mmueller
Hallo,
ich bin absoluter Anfänger und habe folgendes Problem.
Ich habe eine recht umfangreiche Input Datei (kommt aus Abaqus) und muss mittels eines Perl Skripts an einer bestimmten Stelle ein paar Sachen einfügen.
So, ich habe mir gedacht ich realisiere das mit dem splice Befehl. Problem jedoch ist, dass die Zeile die ich hierfür angeben muss variiert. Das heißt ich müsste zunächst diese Zeile suchen und sie anschließend irgendwie auslesen (also die Nummer). Alternativ habe ich mir gedacht es mit einem regulären Ausdruck zu machen, aber kann ich bei diesen auch einfügen? ich habe bisher nur vom ersetzen gelesen.
freue mich über antworten
danke
grüße
max
Hi Max!
Wenn du den regulären Ausdruck bilden kannst, der dir die richtige Stelle findet, dann hast du doch schon gewonnen:
Sei dieser der Art
myReplaceString ~= s/(Anfangsuchmuster)(EndeSuchmuster)/$1 derEinfügeString$2/
Wichtig: die () erzeugen (setzen) die $1 $2 ..., mit den Teile aus myReplaceString, die auf Anfangsuchmuster und EndeSuchmuster gepasst haben.
Anmerkung: natürlich kannst du auch eines der beiden Suchmuster weglassen, dann folgt:
myReplaceString ~= s/(Anfangsuchmuster)/$1 derEinfügeString/
myReplaceString ~= s/(EndeSuchmuster)/derEinfügeString$1/
Viel Spass,
Richard
hey super,
vielen dank für die schnelle antwort. den regulären ausdruck hab ich noch nicht so wie er sein soll, aber das grundprinzip funktioniert. vielen vielen dank
grüße
max
Diesbezüglich habe ich noch eine frage... (sorry, der anfänger...)
ich habe meine datei, die ich als array einlese. jetzt habe ich meinetwegen die stelle
test
darunter
und da möchte ich dazwischen jetzt was ersetzen. wenn ich das ganze jetzt aber mittels
myReplaceString ~= s/(test)\n(darunter)/$1 derEinfügeString$2/
das ganze versuche anzusprechen, klappt das. wenn ich nur das anfangssuchmuster eingebe funktioniert es, aber ich brauche auch das endmuster. jemand eine idee?
vielen dank für eure hilfe!
grüße
max
Hi Max!
Wenn du den regulären Ausdruck bilden kannst, der dir die richtige Stelle findet, dann hast du doch schon gewonnen:
Sei dieser der Art
myReplaceString ~= s/(Anfangsuchmuster)(EndeSuchmuster)/$1 derEinfügeString$2/
Wichtig: die () erzeugen (setzen) die $1 $2 ..., mit den Teile aus myReplaceString, die auf Anfangsuchmuster und EndeSuchmuster gepasst haben.
Anmerkung: natürlich kannst du auch eines der beiden Suchmuster weglassen, dann folgt:
myReplaceString ~= s/(Anfangsuchmuster)/$1 derEinfügeString/
myReplaceString ~= s/(EndeSuchmuster)/derEinfügeString$1/Viel Spass,
Richard
Hi Max!
myReplaceString ~= s/(test)\n(darunter)/$1 derEinfügeString$2/
Also, da gibts jetzt folgende Möglichkeiten:
1. Du kannst das Array mittels join (mit trennzeichen \n)(perl befehl) zusammenfassen und dann suchen (nicht sehr performant).
2. Du kannst mittels regular expression "match" iterativ immer zwei aufeinanderfolgende Zeilen untersuchen, alla (Syntax ungeprüft...)
my $ arraylen = @filelines;
for ($count=0; $count<$arraylen-1; $count++)
{
if ($filelines[count]~=m/test$/ && $filelines[count+1]~=m/^darunter/)
{
$filelines[count] = $filelines[count] . "derEinfügeString"
}
}
3. Du nimmst nicht perl, sondern lex...
Grüsse,
Richard
ich habe meine datei, die ich als array einlese. jetzt habe ich meinetwegen die stelle
eine grosse Datei in ein Array einzulesen ist nicht unbedingt empfehlenswert.
test
darunter
und da möchte ich dazwischen jetzt was ersetzen. wenn ich das ganze jetzt aber mittels
Die Frage hier ist, ob du darunter auch kennen musst oder ob es reicht test zu finden. Dann wäre es einfacher die Datei zeilenweise zu lesen und gleichzeitig in eine Kopie zu schreiben und an der Fundstelle den Einfügestring einzufügen.
grüße
maxHi Max!
Ach, und bitte lasse nur das stehen aorauf deine Antwort sich bezieht
Struppi.
Ich habe eine recht umfangreiche Input Datei (kommt aus Abaqus) und muss mittels eines Perl Skripts an einer bestimmten Stelle ein paar Sachen einfügen.
Das würde ich nicht tun, sondern während du die eine Datei liest, eine zweite Datei schreiben inkl. den Ergänzungen.
Struppi.
ja ne, die original datei lass ich schon ganz :) oder hast du das gemeint?
Ich habe eine recht umfangreiche Input Datei (kommt aus Abaqus) und muss mittels eines Perl Skripts an einer bestimmten Stelle ein paar Sachen einfügen.
Für fast alle Deine Teilprobleme sollte Tie::File einen Ansatz bieten.
Siechfred
so, mir ist klar warum das nicht mit foreach funktioniert. wie kann ich das problem dann lösen? ich habe es jetzt mit
for(@lines)
{
if(/(test)\n(einszwei)/)
{ print "yeah"; }
}
probiert, aber das geht auch nicht?
vielen dank für eure antworten
gruß max
Hallo,
ich bin absoluter Anfänger und habe folgendes Problem.
Ich habe eine recht umfangreiche Input Datei (kommt aus Abaqus) und muss mittels eines Perl Skripts an einer bestimmten Stelle ein paar Sachen einfügen.
So, ich habe mir gedacht ich realisiere das mit dem splice Befehl. Problem jedoch ist, dass die Zeile die ich hierfür angeben muss variiert. Das heißt ich müsste zunächst diese Zeile suchen und sie anschließend irgendwie auslesen (also die Nummer). Alternativ habe ich mir gedacht es mit einem regulären Ausdruck zu machen, aber kann ich bei diesen auch einfügen? ich habe bisher nur vom ersetzen gelesen.freue mich über antworten
danke
grüße
max
sorry, hab den topic verwechselt