Wątek przeniesiony 2023-12-23 23:53 z C# i .NET przez furious programming.

Jak porównać po kolei łancuch z pliku1 z każdym łańcuchem z pliku2?

0

Mam 2 pliki : file1.txt i file2.txt.

file1:
28B9172102000012 12.5
28BB123721020000 15.2
(łancuch1 liczba)

file2:
28B9172102000012 sensorix1
28BB123721020000 sensorian23
28BB123721020052 sensix5
(ten plik to baza danych ktora pokazuje jak sie nazywa łancuch czyli forma: łańcuch2 nazwa)

i teraz chciabym porównac po kolei kazdy łancuch1 z file1 z każdym łancuchem2 w pliku file2, tak aby uzyskac efekt:
nazwa (przypadająca łańcuchowi2 opisanemu w file2) liczba (z file1) tak aby spelniona zostala zalesnosc, np:

sensorix1 12.5 (poniewaz łancuch1 z file1 == łańcuch2 z file2)
itd dla kazdego z łancuch1 z file1

jesli nie znajdzie w file2 łancucha2 == łancuchowi1 z file1 to analizuje kolejny łąncuch1 z pliku file1 w ten sam sposob co powyzej

i wynik do file3

Dzięki

0
  1. Dlaczego więc to nie jest bazą danych np. SQLite tylko txt,
  2. Jak dużo jest tych danych w jednym i drugim,
  3. Czy operacja będzie wykonywana wiele razy, mam na myśli że np. plik1 jest sprawdzany z plik2, plik3,...
  4. Czy w danym pliku łańcuchy się mogą powtórzyć?
0

Załaduj sobie oba pliki do listy

var file1Lines = File.ReadAllLines(FILE1);
var list1 = new List<string>(file1Lines);

var file2Lines = File.ReadAllLines(FILE2);
var list2 = new List<string>(file2Lines);

A potem te listy możesz przerobić na trzecią

     List<string> list1 = new List<string>() {
       "28B9172102000012 12.5",
       "28BB123721020000 15.2"
     };

     List<string> list2 = new List<string>() {
       "28B9172102000012 sensorix1",
       "28BB123721020000 sensorian23",
       "28BB123721020052 sensix5"
     };

     List<string> result = list2.Join(list1, x=> GetId(x), y => GetId(y), (a, b) => GetId(a) + " " + GetValue(b)).ToList();

     foreach(var res in result){
       Console.WriteLine(res);
     }

// ---
  private static string GetId(string text) {
    return text.Split(' ')[0];
  }

  private static string GetValue(string text) {
    return text.Split(' ')[1];
  }

Pytanie może głupie, ale po co to łączyć z dwóch plików skoro rezultat jaki chcesz uzyskać jest w jednym z tych plików, albo ja nie rozumiem problemu 😏🤔

0

ok wiec tak:

file1 to wynik działania systemu odczytu czujnikow temeratury na magistrali 1-wire w postaci:

string1 SPACJA 15
string2 SPACJA 20
itd
przy czym string1, string2 to nazwa kodowa danego czujnika po spacji temperatura

file2 to baza nazw kodowych czujnkow ktore sa polaczone i ich tlumaczenie na ludzki jezyk: za oknem, na parapecie

idea jest taka: system czyta na magistrali nazwy kodowe i wartosc temperatury do file1, a ja chce przetlumaczyc te nazwy kodowe na ludzki jezyk na podstawie bazdy danych w pliku file2. ta baza danych jest mala bo zawiera 10 czujnikow (nazwa kodowa SPACJA nazwa po ludzku)

i to tlumaczenie: nazwa po ludzku SPACJA temperatura ma trafic do pliku file3

tak wiec system ma analizowac dane z file1 i tlumaczyc je na podstawie file2 awynik tlumaczenia ma trafic do file3

system to linux, powłoka sh, jezyk C

0

No to przetwarzaj w locie. Wczytaj do pamięci dane z file2 i porównuj z tym co przychodzi z czujników i zapisz do pliku

0

OK rozwiazanie:

awk 'FNR==NR{a[$1]=$2;next} ($1 in a){print $2,a[$1]}'  file1  file2

dziękuję

0

^ ładne C w akcji

ps zabrakło > file3

0
AdamWox napisał(a):
     List<string> list1 = new List<string>() {
       "28B9172102000012 12.5",
       "28BB123721020000 15.2"
     };

     List<string> list2 = new List<string>() {
       "28B9172102000012 sensorix1",
       "28BB123721020000 sensorian23",
       "28BB123721020052 sensix5"
     };

Ja bym umarł, jakbym nie zrobił tego choć trochę obiektowe

List<Pomiar> list1 = new List<Pomiar>() {
        new Pomiar("28B9172102000012 12.5"),
        new Pomiar("28BB123721020000 15.2")
      };
 
      List<Urzadzenie> list2 = new List<Urzadzenie>() {
        new Urzadzenie("28B9172102000012 sensorix1"),
...
      };

Z oczywistymi konstruktorami i polami

Dregorio napisał(a):
  1. Dlaczego więc to nie jest bazą danych np. SQLite tylko txt,
  2. Jak dużo jest tych danych w jednym i drugim,
  3. Czy operacja będzie wykonywana wiele razy, mam na myśli że np. plik1 jest sprawdzany z plik2, plik3,...
  4. Czy w danym pliku łańcuchy się mogą powtórzyć?

+1

1 użytkowników online, w tym zalogowanych: 0, gości: 1