Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
.txt Datei Filtern und die wichtigen daten extrahieren
LangWind
myCSharp.de - Member



Dabei seit:
Beiträge: 5

Themenstarter:

.txt Datei Filtern und die wichtigen daten extrahieren

beantworten | zitieren | melden

Hallo,
ich hoffe ich bin hier richtig .

Ich bin gerade dabei in C# ein tool zu Programmieren was mir auf der Arbeit etwas zeit Erspart.
Und zwar bekommen wir von unserem Arbeitgeber eine .pdf Datei mit dem Arbeitsaufträgen wo wir dann noch per Hand die daten in Trello einpflegen müssen, was ich aber gerne automatisieren möchte.

meine Frage ist :
-Wie kann ich die fettgedruckten werte extrahieren , und ich c# als String Variablen Speichern ?

Das ist nur eine Skizze !
Die Schriftart ist im original konstant und einige Bereiche könnten mehrzeilig sein !

MFG

Auftrag von 02.04.2022 für Herrn Max Mustermann

Arbeit: Reparatur an der Dachrinne

Material: PVC

Arbeiter: Olaf:o Günter:x Peter:o

Auftrag zum Termnin:

Fr. 21.04.2022 16:00 Erste Abnahme
private Nachricht | Beiträge des Benutzers
Th69
myCSharp.de - Experte

Avatar #avatar-2578.jpg


Dabei seit:
Beiträge: 4.359

beantworten | zitieren | melden

Hallo und willkommen,

zuersteinmal mußt du die Texte aus dem PDF extrahieren. Dazu benötigst du eine passende Bibliothek wie z.B. iText 7 (Nachfolger von iTextSharp): Extracting text from pdf using iText7 c# library.

Dann liest du die Textdaten entweder jeweils zeilenweise und überprüfst anhand des Textanfangs (String.StartsWith) und extrahierst dann die passenden Werte (z.B. per IndexOf + String.Substring)), s.a. Methoden der Klasse String.
Wenn die Reihenfolge der Daten immer gleich ist, dann kannst du auch einfach sequentiell vorgehen.

Eine andere Alternative wäre die Benutzung von Regex, s.a. [Artikel] Regex-Tutorial.
private Nachricht | Beiträge des Benutzers
ClaraSoft
myCSharp.de - Member



Dabei seit:
Beiträge: 48

beantworten | zitieren | melden

Guten Morgen

Mein erster Ansatz wäre jetzt Regular Expressions(Regex). Damit kann man schon eine Menge anstellen, was das verarbeiten von Texten/Zeichenketten angeht, damit solltest du auch die Daten aus deiner Datei bekommen.

Grüße
private Nachricht | Beiträge des Benutzers
gfoidl
myCSharp.de - Team

Avatar #avatar-2894.jpg


Dabei seit:
Beiträge: 6.830
Herkunft: Waidring

beantworten | zitieren | melden

Hallo LangWind,

achte bei iText unbedingt auf die Lizenz.

Falls das PDF rein textuell aufgebaut ist, so kann auch z.B. mittels pdfgrep der Text extrahiert und anschließend von deinem C#-Programm geparst werden.
Da der Export rein textuell ist und gem. deinem Beispiel das recht kanonisch aufgebaut ist, sollte das gehen. Bei den Arbeitern ist der Fettgedruckte auch mit einem x versehen, so dass dies (beim Beispiel zumindest) eindeutig ist.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"
private Nachricht | Beiträge des Benutzers
LangWind
myCSharp.de - Member



Dabei seit:
Beiträge: 5

Themenstarter:

beantworten | zitieren | melden

Vielen Dank ich bin weiter gekommen
und habe das Problem Lösen können !
private Nachricht | Beiträge des Benutzers
gfoidl
myCSharp.de - Team

Avatar #avatar-2894.jpg


Dabei seit:
Beiträge: 6.830
Herkunft: Waidring

beantworten | zitieren | melden

Hallo LangWind,

super, wenn du eine Lösung gefunden hast. Noch idealer und im Sinne der Community wäre jedoch, wenn du hier die Lösung auch zeigen könntest.
Falls jemand ein ähnliches Problem hat, so kann er sich daran orientieren.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"
private Nachricht | Beiträge des Benutzers
LangWind
myCSharp.de - Member



Dabei seit:
Beiträge: 5

Themenstarter:

beantworten | zitieren | melden

Ist jetzt nicht passend zu der Beispiel Txt Datei wie oben, aber so funktioniert das bei mir Fehler frei

Bei Verbesserungen und Komprimierungs vorschlägen der Methode würde ich mich natürlich sehr freuen


 public void WerteSuchen(string Nameof)
        {
            try
            {
                string[] separator = { "\\r\\n" };
                string path = "log.txt";
                string text = File.ReadAllText(path).ToLower();
                File.Delete(path);

                //Art der Arbeit Auslesen
                string SuchStart1 = "art der arbeit:";
                string SuchEnd = "ok rechts";
                string temp1 = text.Substring(text.IndexOf(SuchStart1));
                string Beschreibung = temp1.Substring(0, temp1.IndexOf(SuchEnd));

                //Standort Suchen
                string SuchStart = "standort:";
                string temp = text.Substring(text.IndexOf(SuchStart));
                string temp2 = temp.Substring(9, 39);
                string[] Augselesen = temp2.ToLower().Split(separator, StringSplitOptions.None);
                string herdecke = "herdecke: x";
                string herdecke2 = "herdecke: ox";
                Regex regexherdecke = new Regex(herdecke);
                Regex regexherdecke2 = new Regex(herdecke2);
                string kirchhörde = "kirchhörde: x";
                string kirchhörde2 = "kirchhörde: ox";
                Regex regexkirchhörde = new Regex(kirchhörde);
                Regex regexkirchhörde2 = new Regex(kirchhörde2);
                string wetter = "wetter: x";
                string wetter2 = "wetter: ox";
                Regex regexwetter = new Regex(wetter);
                Regex regexwetter2 = new Regex(wetter2);

                //Datum + Uhrzeit 
                string SuchStart2 = "auftrag zum nächsten termin:";
                string tempTime = text.Substring(text.IndexOf(SuchStart2));
                string timeIn = tempTime.Substring(33, 16);
                DateTime aDate = DateTime.Parse(timeIn);
                string tempTime2 = (aDate.ToString("yyy-MM-ddTHH:mm:sszzz"));

                //Liste Auslesen 
                foreach (string s in Augselesen)
                {
                    if (regexherdecke.IsMatch(s)|regexherdecke2.IsMatch(s))
                    {
                        ApiRequest apiRequest = new ApiRequest();
                        apiRequest.PostRequest(Nameof, "green", Beschreibung, tempTime2);
                        break;
                    }
                    if (regexkirchhörde.IsMatch(s)|regexkirchhörde2.IsMatch(s))
                    {
                        ApiRequest apiRequest1 = new ApiRequest();
                        apiRequest1.PostRequest(Nameof, "blue", Beschreibung, tempTime2);
                        break;
                    }
                    if (regexwetter.IsMatch(s)|regexwetter2.IsMatch(s))
                    {
                        ApiRequest apiRequest2 = new ApiRequest();
                        apiRequest2.PostRequest(Nameof, "pink", Beschreibung, tempTime2);
                        break;
                    }
                    else
                    {
                        ApiRequest apiRequest3 = new ApiRequest();
                        apiRequest3.PostRequest(Nameof, "red", Beschreibung, tempTime2);
                        break;
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            } 
        }
private Nachricht | Beiträge des Benutzers
Th69
myCSharp.de - Experte

Avatar #avatar-2578.jpg


Dabei seit:
Beiträge: 4.359

beantworten | zitieren | melden

Die Datei solltest du aber besser erst löschen, nachdem die Methode erfolgreich durchlaufen wurde (also wenn keine Exception aufgetreten ist). Oder ist sie nicht so wichtig und kann wiedererzeugt werden?

Und am besten dann zwei Methoden daraus machen.
private Nachricht | Beiträge des Benutzers
dannoe
myCSharp.de - Member



Dabei seit:
Beiträge: 218

beantworten | zitieren | melden

Falls deine ganzen regulären Ausdrücke tatsächlich nur aus Literalen bestehen und kein regulären Ausdrücke enthalten, brauchst du die Regex Klasse auch nicht.

Statt



string wetter = "wetter: x";
string wetter2 = "wetter: ox";
Regex regexwetter = new Regex(wetter);
Regex regexwetter2 = new Regex(wetter2);
if (regexwetter.IsMatch(s)|regexwetter2.IsMatch(s))
{
    ApiRequest apiRequest2 = new ApiRequest();
    apiRequest2.PostRequest(Nameof, "pink", Beschreibung, tempTime2);
    break;
}
kannst du auch


string wetter = "wetter: x";
string wetter2 = "wetter: ox";
if (s.IndexOf(wetter) ≥ 0 || s.IndexOf(wetter2) ≥ 0)
{
    ApiRequest apiRequest2 = new ApiRequest();
    apiRequest2.PostRequest(Nameof, "pink", Beschreibung, tempTime2);
    break;
}
schreiben.

Hinweis: Es gibt außerdem einen Unterschied zwischen dem
|| Operator: https://docs.microsoft.com/de-de/dotnet/csharp/language-reference/operators/boolean-logical-operators#conditional-logical-or-operator-
und dem
| Operator: https://docs.microsoft.com/de-de/dotnet/csharp/language-reference/operators/boolean-logical-operators#logical-or-operator-
private Nachricht | Beiträge des Benutzers
Wilfried
myCSharp.de - Member

Avatar #2TnJ7IKlYXgOor5sZSIA.jpg


Dabei seit:
Beiträge: 135
Herkunft: Radeberg

beantworten | zitieren | melden

Hallo, für mich ist etwas verwirrend, dass in der Überschrift von txt die Rede ist, im ersten Beitrag aber plötzlich von pdf und nun wieder von txt. In der Auswertung spielt es dann zwar keine Rolle mehr, aber passt halt irgendwie nicht zusammen.
- Wer lesen kann, ist klar im Vorteil
- Meistens sitzt der Fehler vorm Monitor
- "Geht nicht" ist keine Fehlermeldung!
- "Ich kann programmieren" != "Ich habe den Code bei Google gefunden"

GidF
private Nachricht | Beiträge des Benutzers