Hallo Liebe Kollegen,
Ich bin hier neu bzw. neu in c#. Wegen meiner Arbeit bin ich gezwungen mein Projekt in c# zu programmieren. Ich bin leider ein wenig überfordert. Ich hoffe ihr könnt mir ein wenig helfen.
Nun zu meinem Problem. Ich habe 2 Dateien. Eine Notepad Datei und eine Excel Datei. Die Notepad Datei habe ich erfolgreich ins c# eingelesen. Nun möchte ich auch mein Excel Sheet einlesen und Werte vom Excel ins Notepad überschreiben/replacen.
Ich bekomme von einem Program eine Output Datei (Notepad - Datei)
Die Formatierung lautet wie folgt: [Einheit Optional] Variable = Wert -> siehe:
[mm]p0=45
[mm]param1=36.42199010819
[mm]param2=56
param9=56
[degrees]p3=453
[degrees]p4=134
[mm]p5=56
p6=1
p7=1
Dann habe ich noch mein** Excel Sheet:**
p3 p2 p9 param9 param2 param1 p9 p23 param1 p3
32 2 23 55 1 4,333333333 -6,666666667 -17,66666667 -14,95753715
2 3 78 103,6666667 141,6666667 179,6666667 217,6666667 255,6666667 293,6666667 331,6666667
-28 4 133 152,3333333 282,3333333 431 518 605 678,2908705
-58 5 188 201 423 179,6666667 644,3333333 780,3333333 916,3333333 1024,915074
-88 6 243 249,6666667 563,6666667 857,6666667 1042,666667 1227,666667 1371,539278
-118 7 298 298,3333333 704,3333333 179,6666667 1071 1305 1539 1718,163482
In der erste Zeile stehen immer die Variablen darunter dann die dazugehörenden Werte.
Nun möchte ich mittels C# die einzelnen Variablen Namen im Excel durchgehen und schauen ob diese in der Notepad Datei vorhanden sind. Wenn diese Variable in beiden Dateien vorhanden sind möchte ich den Wert vom Excel übernehmen und sie in Notepad Datei überschreiben. Und das möchte ich für alle Variabllen und Werte mittel Schleife machen.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.InteropServices;
using Excel = Microsoft.Office.Interop.Excel;
namespace ConsoleApplication3
{
class Program
{
static void Main(string[] args)
{
string[] lines = System.IO.File.ReadAllLines(@"C:\Users\Z003DUKJ\Desktop\notepad.txt");
int stop = 1;
}
}
}
Bei Excel wird's schwierig, besonders wenn Du noch Anfänger bist.
Ich kann dir keine vollständige Anleitung bieten, aber einige Stichpunkte, nach denen Du suchen kannst. Wenn Du damit dann nicht weiter kommst, kannst Du ja wieder fragen.
Bezüglich der TXT:
Ich würde eine Klasse schreiben, die eine Zeile darstellen kann und die drei Inhalte Name, Wert und Einheit beinhaltet. Wenn Du die TXT-Datei dann einliest, kannst Du mit einfachen String-Operationen (z.B. Split) jede Zeile parsen und ein Objekt dazu erzeugen. Für komplexere Dinge könnte sich auch der Blick in Richtung Regex lohnen, allerdings ist der Einstieg schwer.
Bezüglich Excel:
Wenn es CSV ist (Excel kann CSV), dann such eine CSV-Library raus, davon gibt's genug. Das ist bedeutend einfacher, als direkt mit Excel zu hantieren. Viele können dir das auch direkt in Objekte Parsen und als Liste ausgeben.
Ist es kein CSV, kannst Du alternativ mit ODBC eine Datenbank-"Verbindung" mit einer Excel-Datei herstellen und dann mittels SQL suchen. Das könnte der einfachste Weg sein, allerdings hab ich gehört, dass ODBC gerne etwas hackelig sein soll, eigene Erfahrungen habe ich keine.
Wenn es OpenXml ist, dann gibt's auch Frameworks, die das können. Das offizielle Framework für OpenXml würde ich nicht anfassen, das ist ein Krampf. Stattdessen empfehle ich dir das Framework ClosedXml. Die Dokumentation könnte besser sein, aber der Aufbau und die Benennung ist so gut gewählt, dass das meiste super intuitiv und selbsterklärend von der Hand geht.
So oder so weiß ich aber nicht, ob diese Frameworks eine vollständige Suche unterstützen, im Zweifel musst Du also jede Zelle einzeln durch gehen und prüfen.
NuGet Packages im Code auslesen
lock Alternative für async/await
Beim CleanCode zählen nicht die Regeln, sondern dass wir uns mit diesen Regeln befassen, selbst wenn wir sie nicht befolgen - hoffentlich nach reiflichen Überlegungen.
@Palladin007 ich glaube ich werde es nicht kapieren...
Ich als Techniker habe schon Lösungen im Kopf kann es aber nicht auf c# übertragen...
Bezüglich .txt ich glaube diese Vorgehensweise ist für mich zu kompliziert. Ich würde lieber in der jeweiligen Zeile nach Strings suchen und dann den Wert nach dem = Zeichen mit dem Excel Wert ersetzen/überschreiben. Des weiteren weiß ich ....Was ist "CSV"? Bzw. welche Referenzen muss ich für das Excel laden? Ka ich weiss nicht wie das lösen kann...
Jedenfalls Danke für deine Antwort.
Benutze EPPlus, damit kannst du Excel-Dateien Problemlos öffnen und die einzelnen Tabellen/Zellen problemlos durchlaufen und bearbeiten/durchsuchen/sonstwas.
Beste Grüße
emuuu
P.S.
Bezüglich .txt ich glaube diese Vorgehensweise ist für mich zu kompliziert
foreach(var line in File.ReadAllLines(stringToFile))
{
var parts = line.Split('\t');
}
Wenn du eine Excel-Tabelle in eine txt-Datei (oder csv, im Prinzip egal) packst kannst du die so auslesen. (\t steht hier für die Escape-Sequenz des Tab, da Excel die standardmäßig so ins Clipboard packt)
line repräsentiert dabei jede Zeile der Tabelle und parts ist ein string-Array wobei [0] die erste Spalte ist und [n] die letzte. Also nicht besonders kompliziert.
2+2=5( (für extrem große Werte von 2)