Text fortlaufend aus Datei ersetzen (relativ komplizierter Fall)

tranuchebo

Cadet 3rd Year
Registriert
Juli 2015
Beiträge
32
Ich habe eine Textdatei mit 100.000 Einträgen in der ungefähr folgendes steht:

String_1
String_2
String_3
String_4
String_5
String_6
String_7
String_8
String_9
String_10
Der Inhalt von jeder Zeile (ist immer nur eine zusammenhängende Zeichenkette bestehend aus 10-14 Zeichen) soll jetzt hier eingefügt werden:

TYPE=INPUT:ID ATTR=ID:string CONTENT=String_insert

Wenn ich einfach nur "Suchen und ersetzen" verwende, wird ja immer nur der gleiche String ersetzt. :lol:
Deshalb sieht mein Code momentan so aus:

TYPE=INPUT:ID ATTR=ID:string CONTENT=String_1
TYPE=INPUT:ID ATTR=ID:string CONTENT=String_1
TYPE=INPUT:ID ATTR=ID:string CONTENT=String_1

(also alles exakt gleich)

Ich möchte nun das der Inhalt der Textdatei Zeile für Zeile fortlaufend eingefügt wird.

So soll das am Ende aussehen:
TYPE=INPUT:ID ATTR=ID:string CONTENT=String_1
TYPE=INPUT:ID ATTR=ID:string CONTENT=String_2
TYPE=INPUT:ID ATTR=ID:string CONTENT=String_3
TYPE=INPUT:ID ATTR=ID:string CONTENT=String_4
TYPE=INPUT:ID ATTR=ID:string CONTENT=String_5
TYPE=INPUT:ID ATTR=ID:string CONTENT=String_6
TYPE=INPUT:ID ATTR=ID:string CONTENT=String_7
TYPE=INPUT:ID ATTR=ID:string CONTENT=String_8
TYPE=INPUT:ID ATTR=ID:string CONTENT=String_9
TYPE=INPUT:ID ATTR=ID:string CONTENT=String_10

Habe mir extra UltraEdit gekauft, komme aber damit auch nicht zum Ziel...

Weiß jemand wie ich das machen kann?

Danke für alle Anregungen / Ideen. :)
 
du musst copy paste machen und die zahl von hand eingeben. Dauert nur paar stunden :lol:
 
naja, excel nehmen, in zwei spalen auflisten und dann formel anwenden
 
excel tabelle.

TYPE=INPUT:ID ATTR=ID:string CONTENT=String_1
in A1 schreiben und nach unten ziehen bis 100.000 ;)

quick&dirty
 
tranuchebo schrieb:
Ich habe eine Textdatei mit 100.000 Einträgen in der ungefähr folgendes steht:


Der Inhalt von jeder Zeile (ist immer nur eine zusammenhängende Zeichenkette bestehend aus 10-14 Zeichen) soll jetzt hier eingefügt werden:



Wenn ich einfach nur "Suchen und ersetzen" verwende, wird ja immer nur der gleiche String ersetzt. :lol:
Deshalb sieht mein Code momentan so aus:



(also alles exakt gleich)

Ich möchte nun das der Inhalt der Textdatei Zeile für Zeile fortlaufend eingefügt wird.

So soll das am Ende aussehen:


Habe mir extra UltraEdit gekauft, komme aber damit auch nicht zum Ziel...

Weiß jemand wie ich das machen kann?

Danke für alle Anregungen / Ideen. :)

UltraEdit ist teuer und bringt nichts. Lade Dir "EditPad Lite" von JGSoft herunter und mache es mit einem Regulären Ausdruck ... lade den Text, drücke [Strg+F] und gib unten ein:
- in der Suchen-Spalte: (String_\d+)
- in der Ersetzen-Spalte: TYPE=INPUT:ID ATTR=ID:string CONTENT=$1

Wie funktioniert das? Der in der Suchen-Spalte umklammerte Teil wird gepuffert, das '\d+' darin bedeutet "mindestens eine(1) oder mehrere Ziffern". Dieser Puffer wird beim Ersetzen als '$1' eingefügt.

Regular Expressions sollte nicht nur jeder Editor beherrschen, sondern auch jeder, der viel scriptet oder textet ...
 
tranuchebo schrieb:
Weiß jemand wie ich das machen kann?

Git-bash installieren, Fenster öffnen und Perl in der Kommandozeile aufrufen:

perl -lne 'printf"TYPE=INPUT:ID ATTR=ID:string CONTENT=%s\n",$_' altedatei.txt > neuedatei.txt

Thats it!
 
Danke für beide Ideen, aber so wird das ja nur durchnummeriert.

Habe mein Beispiel schlecht ausgedrückt, in der Praxis soll aus

String_1
String_1
String_1
String_1
String_1

usw.

folgendes werden
YRZYQMTBQQCBTLTUV
LKJAVDCNIDPJFSSWJ
IIAHFMSHLAZVEXOZP
QHGSJIFYSXGSZRCXV
HQJNCVHMPKULDQDUV
RLQEDMOKAHGBTWFL2
MKRIAIDWYVIKTFMGL
BWVDYVQXXSMZJOZJB
GSFFOWLMMAAJXJYNK
KQUAUCOJARNPVSXVI
Der Inhalt oben stammt aus einer Textdatei.

Eine Nummerierung ist nicht erforderlich, es soll nur exakt dieser Inhalt Zeile für Zeile übernommen werden.


Ich habe hier mal einen einfachen Beispielcode wie ich das meine:
PHP:
<?php 
$name="String_1"; 

print ("Die ID lautet $name.\n")
?>

<?php 
$name="String_1"; 

print ("Die ID lautet $name.\n")
?>

<?php 
$name="String_1"; 

print ("Die ID lautet $name.\n")
?>

und daraus soll werden:

PHP:
<?php 
$name="YRZYQMTBQQCBTLTUV"; 

print ("Die ID lautet $name.\n")
?>

<?php 
$name="LKJAVDCNIDPJFSSWJ"; 

print ("Die ID lautet $name.\n")
?>

<?php 
$name="IIAHFMSHLAZVEXOZP"; 

print ("Die ID lautet $name.\n")
?>
 
Mit Word Suchen und Ersetzen / Platzhalter verwenden könnte es gehen. Da kannst du ja die Zeilenumbrüche durch den langen Text ersetzen und mit \1 auf den Suchbegriff referenzieren.

Viele Grüße, Halwe
 
tranuchebo schrieb:
Der Inhalt oben stammt aus einer Textdatei.

Na wie denn nun? Wer soll das verstehen? Du hast also nicht eine sondern zwei Textdateien? Und jede Zeile aus No. 1 soll mit jeder Zeile aus No. 2 kombiniert werden? Zeig doch mal konkret, wie das Ergebnis (3 Zeilen) aussehen soll und wie die konkreten Ausgangsdaten dafür aussehen.
 
blöderidiot schrieb:

Vorhandene Dateien

  • eine PHP-Datei
  • eine Textdatei

Ausgangssituation der PHP-Datei


PHP:
<?php 
$name="DAS_HIER_SOLL_KOMPLETT_ERSETZ_WERDEN"; 

print ("Die ID lautet $name.\n")
?>

<?php 
$name="DAS_HIER_SOLL_KOMPLETT_ERSETZ_WERDEN"; 

print ("Die ID lautet $name.\n")
?>

<?php 
$name="DAS_HIER_SOLL_KOMPLETT_ERSETZ_WERDEN"; 

print ("Die ID lautet $name.\n")
?>

DAS_HIER_SOLL_KOMPLETT_ERSETZ_WERDEN = A

Ausgangssituation der Text-Datei

Pro Zeile ein Hash (B) der ungefähr so aussieht, dass ganze wird getrennt durch jeweils eine neue Zeile, sieht also so aus...
Code:
YRZYQMTBQQCBTLTUV
LKJAVDCNIDPJFSSWJ
IIAHFMSHLAZVEXOZP
QHGSJIFYSXGSZRCXV

Gewünschtes Endergebnis

Der Hash (B) soll die Einträge (A) komplett ersetzen, am Ende soll das Ergebnis also so aussehen:

PHP:
<?php 
$name="YRZYQMTBQQCBTLTUV"; 

print ("Die ID lautet $name.\n")
?>

<?php 
$name="LKJAVDCNIDPJFSSWJ"; 

print ("Die ID lautet $name.\n")
?>

<?php 
$name="IIAHFMSHLAZVEXOZP"; 

print ("Die ID lautet $name.\n")
?>
 
Wie gesagt: Die Ausgangsdatei in Word (oder ein anderes RegEx-fähiges Textprogramm) laden und dann mit Suchen / Ersetzen den php-Code dazwischen einfügen. So entsteht dann das gewünschte Ergebnis.
Mit Regulären Ausdrücken musst du dich ohnehin irgendwann beschäftigen.
Viele Grüße, Halwe
 
Ok danke, aus Versehen total überlesen. Werde es heute Abend ausprobieren! :)
 
tranuchebo schrieb:
Werde es heute Abend ausprobieren! :)

Ist die PHP-Datei als solche vorher vorgegeben - oder kannst Du die, so wie sie dann sein soll, im Prozess auch neu erzeugen?
 
Gute Frage…

Könnte man sie erzeugen würde ich (Gewohnheit) Excels VBA anstrengen (sowie mein Gehirn nicht übermäßig ;)) und aus den PHP-Zeilen = Fertigteile plus jeder einzelnen Zeile der TXT die endgültige PHP bauen.
Oder ich lese die PHP (so sie nicht wie oben aus Fertigteilen besteht) ein und schreibe jede Zeile wieder aus wobei ich die TXT-Zugaben einbaue.

Mein Instinkt sagt mir, dass Suchen-Ersetzen hier überstrapaziert würde. Mir dem Instrument habe ich schon genug Dinge angestellt, aber je mehr Joker und Einfügedaten desto sperriger.

CN8
 
Naja. Die Anforderung ist nun nicht übermäßig komplex und lässt sich mit EditPad Lite und geringer Modifikation des oben genannten Ausdrucks immer noch im Handumdrehen erledigen.

Zwar kann ich auch nicht - Jeopardy like - von diesem Lösungsansatz auf das eigentliche Problem schließen, doch der resultierende PHP Code scheint selbiges mit dem Vorschlaghammer lösen zu wollen, sodass der Code auch nicht mehr wiederverwendbar ist. Besser wäre es doch, die Datei in einer Schleife Zeile für Zeile einzulesen und dann diese ID-Zeile auszugeben, somit den Code nur einmal zu schreiben, nicht n-mal entsprechend der Zeilenzahl in der Ausgangsdatei, oder irre ich da? Hilfestellung:


<?php
$datei = @fopen("/tmp/inputfile.txt", "r");
if ($datei) {
while (($zeile = fgets($datei, 4096)) !== false) {
echo $zeile;
}
if (!feof($datei)) {
echo "Fehler: unerwarteter fgets() Fehlschlag\n";
}
fclose($datei);
}
?>
 
Zuletzt bearbeitet: (Formulierung)
Xport schrieb:
den Code nur einmal zu schreiben, nicht n-mal entsprechend der Zeilenzahl in der Ausgangsdatei, oder irre ich da?

Typisches X-Y-Problem. User hat Problem "X" und denkt zunächst an seine "Lösung Y". Im "Hilferuf" präsentiert er seine Lösungsidee "Y" als das zu lösende Aufgabe, läßt aber "X" unerwähnt.
 
Also, wenn ich nicht alles falsch verstanden habe:
Nimm die Datei mit den Codes als txt in Word, mache Suchen Ersetzen mit Platzhalter, etwa so:
Suchen: [0-9]{1;2}. ([A-Z]{17})
Ersetzen: <?php^l$name="\1"^l^lprint...
Und du generierst direkt die gewünschte php-Datei.
Viele Grüße, Halwe
 
halwe schrieb:
Also, wenn ich nicht alles falsch verstanden habe:
Nimm die Datei mit den Codes als txt in Word, mache Suchen Ersetzen mit Platzhalter, etwa so:
Suchen: [0-9]{1;2}. ([A-Z]{17})
Ersetzen: <?php^l$name="\1"^l^lprint...
Und du generierst direkt die gewünschte php-Datei.
Viele Grüße, Halwe

Das ist nichts anderes als der EditPad Lite Vorschlag. Um reine Textdateien zu bearbeiten nimmt man indes nicht Word zu Hilfe, sondern einen halbwegs ordentlichen Texteditor (nein - Word ist *kein* Texteditor sondern ein massentaugliches Schreibprogramm. Das *ist* ein Unterschied!) u.A. weil man keinen Einfluss darauf hat, was dieses M$ Programm dem Text noch an "Schmankerln" hinzufügt. Wenn man nicht aufpasst, darf man von vorne anfangen obwohl der Text an sich - in Word betrachtet - immer noch gut aussieht.
 
Zuletzt bearbeitet:
blöderidiot schrieb:
Ist die PHP-Datei als solche vorher vorgegeben - oder kannst Du die, so wie sie dann sein soll, im Prozess auch neu erzeugen?
Die Datei ist also solche fest vorgegeben, also neu erzeugen ist definitiv nicht möglich.
 
Back to the roots…

Wenn ich eine PHP nicht verändern darf, was soll ich denn stattdessen womit anstellen?

Wie sieht die Quelle aus,
YRZYQMTBQQCBTLTUV
LKJAVDCNIDPJFSSWJ
IIAHFMSHLAZVEXOZP
QHGSJIFYSXGSZRCXV
HQJNCVHMPKULDQDUV
RLQEDMOKAHGBTWFL2
MKRIAIDWYVIKTFMGL
BWVDYVQXXSMZJOZJB
GSFFOWLMMAAJXJYNK
KQUAUCOJARNPVSXVI
und was ist sie, eine TXT-Datei?

Und was für eine Datei…
TYPE=INPUT:ID ATTR=ID:string CONTENT=
…soll denn rauskommen? Wieder eine TXT bei der der Inhalt der ersten an diese Zeile, Zeile für Zeile, angehängt wird?

Mir ist völlig schleierhaft wo ich da was hätte bei dem ein Suchen-Ersetzen überhaupt greifen könnte. Beispiele bitte!

CN8
 
Zurück
Oben