Jump to content

Suche in Dateien, Performance steigern


Direkt zur Lösung Gelöst von BOfH_666,
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Hallo zusammen,

ich habe eine Inventarliste mit ca. 1200 Zeilen und ca. 190KB.

 

SIMKARTENNR;TELEFONNR;INVENTARNR;TYPE;BETRIEBSVERANTWORTLICH;ARBEITSPLATZ;SERIENNUMMER;BEMERKUNG
5141241376;18133281;80203;nur SIM-Karte;zuständige Person und Aufgabe;;;div. Anmerkungen
Simkartennr ist im Inventar eindeutig. 

 

und ein Verzeichnis mit ca. 30 Dateien (Abrechnungsdaten) und gesamt ca. 500MB. 

ein findstr /C:"5141241376" *.txt in allen Dateien suche nach Simkartennr benötigt ca. unter 1 Sekunde.

 

kann man das Script etwas schneller machen? läuft derzeit bereits gefühlte 45minuten und ist noch nicht fertig.

 

$InventarCSV = Import-Csv C:\temp\InventarSIM.csv -Delimiter ";" -Encoding Default

foreach($Inventar in $InventarCSV){
    $Inventar.simkartennr
    $treffer = Get-ChildItem c:\temp\*.txt | Select-String -Pattern $Inventar.SIMKARTENNR
    if ($treffer -eq $null){
        write-host $Inventar.SIMKARTENNR -ForegroundColor Yellow
    } 
}

 

bearbeitet von ChaS
Link zu diesem Kommentar
  • Beste Lösung

Hallo und Willkommen im MCSEboard.

Mit Deinem Code klapperst Du für jede einzelne Zeile Deiner Inventarliste ALLE Text-Dateien im Verzeichnis 'C:\temp' ab. Wenn es 30 Dateien sind, prüfst Du also 1.200 mal 30 Dateien. Es wird also 36.000 mal eine Datei gelesen. Da würde ich einen anderen Ansatz versuchen.

Wie ist denn die Beziehung zwischen Simkartennr und Dateien mit Abrechnungsdaten? Ist das 1:1? Falls "ja", würde ich mir einen "Index" mit den Dateien der Abrechnungsdaten mit den jeweiligen Simkartennr aufbauen und diesen dann z.B. mit einem Compare-Object mit der Inventarliste vergleichen. Somit brauchst Du die 30 Dateien nur einmal abklappern und es sollte deutlich schneller laufen. ;-)

bearbeitet von BOfH_666
Link zu diesem Kommentar

es sind 1:n Beziehungen. 1x im Inventar jedes Monat eine Handy Rechnung mit zig. Aufstellungen. 

ich habe jetzt beim testen noch etwas herausgefunden. So wie es aussieht liegt es an den Treffern bei denen es in den Rechnungen Daten gibt. Diese benötigen ca. 3,5 Sekunden, daher dauert es scheinbar etwas (!) länger.

 

 

kein Treffer vorhanden = ca. 1,5 Sekunden

viele Treffer gefunden = ca. 3,8 Sekunden

 

das erklärt das Problem etwas. Ist aber eh nur eine einmalige adhoc Auswertung, da ich herausfinden möchte ob wir im Inventar Leichen haben die nicht mehr abgerechnet werden.

 

DANKE

 

Link zu diesem Kommentar
vor 18 Minuten schrieb ChaS:

es sind 1:n Beziehungen. 1x im Inventar jedes Monat eine Handy Rechnung mit zig. Aufstellungen. 

Es gibt also pro Rechnung mehrere Simkartennummern? Dann würde ich mir erst recht einen Index erstellen, der die Simkartennummern jeder Datei enthält und diesen dann mit den Inventardaten abgleichen. Wenn die Text-Dateien mit den Abrechnungsdaten ein definiertes Format haben, sollte das kein Problem sein.

Link zu diesem Kommentar

Da ich mit Access genau Null Erfahrung habe und Du gesagt hast, dass es sowieso mehr oder weniger eine einmalige Aufgabe ist, würde ich es definitiv in PowerShell machen.

 

vor 5 Minuten schrieb ChaS:

im PS aus den Textdatei einen Index erstellen kann.

 

Das hängt von der Struktur der Text-Dateien ab. Ich würde vermutlich sogar soweit gehen, zu versuchen, die Daten gleich in einem Format zu bekommen, welches für die automatische Verarbeitung besser geeignet ist als Text-Prosa. Am besten z.B. CSV. Bei Business-Verträgen würde ich so einen Service erwarten.

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...