|
|
Mehrere txt-Files nach einer Liste von Worten durchsuchen |
|
Plunder |

Forum-Anfänger
|
 |
Beiträge: 18
|
 |
|
 |
Anmeldedatum: 14.09.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 12.11.2013, 12:33
Titel: Mehrere txt-Files nach einer Liste von Worten durchsuchen
|
 |
Hallo zusammen,
ich würde mir gerne ein Skript bauen mit dem ich in mehreren txt-Files nach bestimmten Wörtern suchen kann.
Das skript soll eine die Suchbegriffe in einer Liste einlesen und dann alle txt-Files danach durchforsten und mir am ende fehlende Begriffe ausgeben.
Kann mir da jemand weiterhelfen? Oder hat jemand ne idee ob man das auch über ein anderes Programm lösen kann?
Die Liste der Suchbegriffe ist ziemlich lang. Deswegen fallen normale Find an Replace funktionen in txt-Editoren leider raus.
Gruß plunder
|
|
|
|
|
Andreas Goser |

Forum-Meister
|
 |
Beiträge: 3.654
|
 |
|
 |
Anmeldedatum: 04.12.08
|
 |
|
 |
Wohnort: Ismaning
|
 |
|
 |
Version: 1.0
|
 |
|
|
 |
|
Verfasst am: 12.11.2013, 12:45
Titel:
|
 |
Es geht schon in MATLAB, z.B. mit TEXTREAD und dann Regular Expressions, aber wenn das nicht in technische Berechnungen eingebettet ist, also MATLAB das Beste Tool ist, ist vielleicht Perl besser...
Andreas
|
|
|
Plunder |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 18
|
 |
|
 |
Anmeldedatum: 14.09.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 12.11.2013, 16:17
Titel:
|
 |
Danke für deine Antwort.
Bin leider nen ziemlicher Anfänger. Bräuchte also zumindest die groben Befehle, wie ich nach und nach jeden Suchbegriff durch alle txt-Files durchjagen kann.
Danke
|
|
|
markuman |

Forum-Guru
|
 |
Beiträge: 320
|
 |
|
 |
Anmeldedatum: 14.12.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: 2013a/2013b, Octave 3.6.4, 3.7.7
|
 |
|
|
 |
|
Verfasst am: 12.11.2013, 22:12
Titel:
|
 |
|
|
denny |

Supporter
|
 |
Beiträge: 3.853
|
 |
|
 |
Anmeldedatum: 14.02.08
|
 |
|
 |
Wohnort: Ulm
|
 |
|
 |
Version: R2012b
|
 |
|
|
 |
|
Verfasst am: 13.11.2013, 12:09
Titel:
|
 |
|
|
Duall777 |

Forum-Anfänger
|
 |
Beiträge: 26
|
 |
|
 |
Anmeldedatum: 28.10.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 13.11.2013, 12:21
Titel:
|
 |
|
 |
|
Also wenn ich alles richtig verstanden habe würde ich es so machen:
zunächst alle Begriffe nach denen du suchen willst in einer Matrix/Vektor speichern z.B. einem nx1 cell.
danach solltest du die dateipfade in denen sich deine .txt-dateien befinden ebenfalls in einer Matrix/Vektor speichern, dazu wäre es hilfreich wenn sie alle einem Ordner liegen.
der code für den pfad könnte so aussehen
Damit Öffnet sich ein Fenster mit dem Titel 'Ordner mit Dateien auswählen:' in dem du den ordner mit den Dateien auswählen kannst
damit speicherst du die namen (und noch andere infos über die dateien die für uns aber nicht wichtig sind) in einem struct namens Dateiname
damit hast du den Dateipfad zu jeder datei in einem Vektor gespeichert
(zum verständnis die Variable "Pfadname" enthält nur dem Pfad zum ordner wo die dateien sich befinden nicht den Pfad zu den dateien selbst deshalb der obige code)
Mit dem Vektor Dateipfad und dem Vektor in dem deine Begriffe, nach denen du suchen willst, gespeichert sind (nennen wir ihn einfach mal "Begriffe") kannst du über eine for schleife den vergleich durchführen
das könnte so aussehen:
somit kriegst du am ende eine Matrix "treffer" in der in der 1. Spalte die fehlenden begriffe der ersten datei stehen in der 2. Spalte die fehlenden begriffe der 2. datei usw.
ich habe den code in Matlab nicht ausprobiert könnte sein das ich etwas übersehen habe besonders bei dieser schleife in schleife geschichte passiert das immer sehr schnell das man etwas nicht bedennkt also falls es nicht auf anhieb funktioniert dann sorry dafür aber mit etwas feinschliff sollte es dann gehen. also zumindest das prinzip sollte damit rübergekommen sein denke ich.
Hoffe ich konnte helfen
|
|
|
Duall777 |

Forum-Anfänger
|
 |
Beiträge: 26
|
 |
|
 |
Anmeldedatum: 28.10.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 13.11.2013, 13:46
Titel:
|
 |
hey mir is gerade ein fehler aufgefallen man kann diese zuweiseung
if strcmp(Begriffe(vv),fid)==0 & prüfft ob begriff in geöffneter Datei
leider nicht machen mann muss vorher die begriffe in eine Variable einlesen
heisst mann muss die schleife etwas umwandeln:
so müsste es gehen, dass problem ist das durch
fid=fopen(Dateipfad(v),'r');
die variable fid einen zahlenwert bekommt( bei mir war es 5, also fid=5)
und dadurch die if-bedingung
if strcmp(Begriffe(vv),fid)==0
immer erfüllt sein wird, da fid nicht den Inhalt der .txt-datei enthält. Das habe ich irgendwie verpeillt
|
|
|
Plunder |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 18
|
 |
|
 |
Anmeldedatum: 14.09.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 14.11.2013, 08:28
Titel:
|
 |
Also erstmal nen riesen Dankeschön für deine Hilfe!!
Allerdings klappt es bei mir nicht. Ich bekomme diesen Fehler:
Error using fopen
First input must be a file name of type char, or a file identifier of type
double.
Mir fällt ist auch noch aufgefallen, dass der Vector Dateiname die größe 1x46 hat, obwohl nur 42 txt dateien vohanden sind...
Die ersten Beiden einträge sind "." und ".."
"i" ist zu dem Zeitpunkt des Fehlers bei 3. Also bei der ersten Richtigen Datei.
Gruß Till
|
|
|
Plunder |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 18
|
 |
|
 |
Anmeldedatum: 14.09.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 14.11.2013, 08:42
Titel:
|
 |
Achso, noch eine Sache.
Mir fällt gerade auf, dass du mich nicht ganz verstanden hast. (Oder ich deinen Code nicht)
Momentan öffnet er doch eine txt Datei und sucht darin nach allen Begriffen. Dann öffnet er die nächste. usw. Oder?
Richtig wäre es aber anders rum. Es geht mir nur darum, ob jeder Begriff min. einmal irgendwo auftaucht.
Also nach Begriff 1 in allen txt files suchen, dann Begriff 2 in allen txt files... usw.
Und dann entweder nen Counter oder ne Warnung bei 0 Treffern.
Gruß Till
|
|
|
markuman |

Forum-Guru
|
 |
Beiträge: 320
|
 |
|
 |
Anmeldedatum: 14.12.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: 2013a/2013b, Octave 3.6.4, 3.7.7
|
 |
|
|
 |
|
Verfasst am: 14.11.2013, 08:53
Titel:
|
 |
Hö? Die Reihenfolge ist doch egal solange das Ergebnis stimmt. Außerdem ist es schneller wenn die Datei nur einmal geöffnet werden muss und nach allen Begriffen gesucht wird, statt die Datei für jeden Suchbegriff erneut zu öffnen.
_________________
DIY OR DIE
entropie=char(floor(94*rand(1, round(100.*rand)) + 32))
https://github.com/markuman
|
|
|
Plunder |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 18
|
 |
|
 |
Anmeldedatum: 14.09.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 14.11.2013, 09:05
Titel:
|
 |
Ja im Grunde ist es egal. Nur muss das Ergebniss dann sinnvoll ausgegeben werden. Es bringt ja nichts, wenn ich nachher für jedes File einzeln ne Liste habe, dass von den 3000 Bgriffen nur 200 drin stehen.
Die txt Files enthalten immer nur einen kleinen Teil der 3000 Begriffe. Ich will am ende nur wissen ob jeder Begriff min 1 mal vorgekommt.
|
|
|
markuman |

Forum-Guru
|
 |
Beiträge: 320
|
 |
|
 |
Anmeldedatum: 14.12.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: 2013a/2013b, Octave 3.6.4, 3.7.7
|
 |
|
|
 |
|
Verfasst am: 14.11.2013, 09:49
Titel:
|
 |
Plunder hat Folgendes geschrieben: |
Ja im Grunde ist es egal. Nur muss das Ergebniss dann sinnvoll ausgegeben werden. |
Hahaha ja, aber das liegt ja an dir Du musst dir lediglich gedanken über die Datenstruktur machen. Z.B. sowas wie a.('datei1').('begriff1')=0 etc.
Drei Beispiele für deine Durchsuchungsfunktion hast du ja bereits bekommen. Du musst lediglich den Output nach belieben speichern/anpassen.
_________________
DIY OR DIE
entropie=char(floor(94*rand(1, round(100.*rand)) + 32))
https://github.com/markuman
|
|
|
Duall777 |

Forum-Anfänger
|
 |
Beiträge: 26
|
 |
|
 |
Anmeldedatum: 28.10.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 14.11.2013, 23:13
Titel:
|
 |
|
 |
|
Hey,
ja stimmt da ist ein kleiner fehler im quelltext. Also versuchs mal entweder mit:
also mach geschweifte klammern draus oder entferne die geschweiften klammern bei der erstellung des Vektors Dateipfad also mache aus
das hier
dann müsste es auch gehen, ich würde dir empfehlen das 2. zu versuchen
das problem war das fopen einen char erwartet und er mit der ursprünglichen zuweisung also mit
Dateipfad(n) = {strcat(Pfadname,'\',Dateiname(i).name)};
Dateipfad als cell erstellt (durch die geschweiften klammern)
und wenn du dann
Dateipfad(v)
eingibst erhälst du nicht den inhalt des cell , der ja ein char ist, erst wenn du es mit geschweiften klammern machst.
zum 2. problem
also der quelltext müsste richtig sein, ich hab etwas ähnliches programmiert und auch diesen code verwendet und bei mir liefs. wie sehen den die anderen beiden "unerwünschten" einträge aus? also wenn du ein vektor von 1x46 hast unf nur 42 dateien müssten ja noch 2 weitere einträge da sein. gut wärs wenn du nen screenshoot oda so davon reinstellen könntest.
und wie sieht "Dateipfad" aus, hat er auch diese einträge?
ansonsten sollte Dateipfad auch diese einträge hab und sollten sie IMMER an denn ersten beiden stellen auftauchen, kannst du anstelle von
schreiben dann fängt er an stelle 3 an und überspringt somit die ersten beiden einträge.
zum 3. problem
ja da hab ich das wohl mir anders gedacht also wie markuman schon sagt ist ja ne ausgabe geschichte die du gestallten kannst wie du willst. im momment ist es so, das er eine datei öffnet und diese mit allen begriffen vergleicht. du kannst es auch andersrum machen und einen begriff nehmen und ihn mit jeder datei vergleichen ich glaube das ist ehr das was du suchst das könnte so aussehen
am ende kriegst du dann einen Vektor "treffer" in dem dann die Begriffe stehen die in keiner .txt-datei vorkammen
probiers mal aus
MfG
Duall777
|
|
|
Duall777 |

Forum-Anfänger
|
 |
Beiträge: 26
|
 |
|
 |
Anmeldedatum: 28.10.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 15.11.2013, 09:53
Titel:
|
 |
hey ich hab mir noch mal das mit Dateiname und den ".", ".." datein angeschaut. also warum diese einträge kommen weis ich nicht aber das ist für dich kein problem, weil durch die zeile
werden in Dateipfad nur die dateien übernehmen in deren Name '.txt' auftaucht. da es bei den beiden anderen nicht der Fall ist werden die nicht übernommen und du arbeitest ja mit dem Vektor Dateipfad weiter und nicht mit Dateiname von daher ist egal
MfG
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2025
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.
|
|