Szybkie wyszukiwanie i kolekcjonowanie informacji z pliku tekstowego.

0

Witam,
Poszukuję pomocy w znalezieniu sposobu na szybkie wyszukanie danych w pliku tekstowym, którego schemat jest stały. Następnie muszę pozyskane dane połączyć ze sobą.
Przykład pliku tekstowego:

101,13,12,37511722,97,13,12,17515162,-9,17,-9,15,14,13,12,27515813,["ID_DYSPOZYCJI","31477164","2000.00","100.00000000","36477059","2020-11-02T1850","23477065"]

W powyższym przykładzie pierwszą liczbę 37511722 muszę przypisać "31477164", drugą liczbę kolejnej w cudzysłowie itd.
Można zauważyć, że inne liczby nie przeszkadzają w wyszukiwaniu tych pożądanych, ponieważ nigdy nie są tak duże, a nawet jeśli to zawsze są z kropką.
Ponadto ciąg danych w cudzysłowie znajduje się za znakiem [ i jak widać są w cudzysłowach.

0

Prosi się o regex, ale - nawet skompilowany - nie będzie wydajny.
Możesz zrobić split na stringu i iterować po elementach, ale to też nie będzie demonem wydajności. Za to ma szansę być w miarę szybkie i bardzo czytelne, jeśli to porozbijasz na małe, dobrze nazwane metodki.
Moim zdaniem najwydajniej będzie przejechać po wszystkich znakach w pętli, a w środku użyć np. StringBuffer, dodawać do niego bieżący znak, jeśli nie jest on liczbą ani kropką, to sprawdzić czy to co w nim jest jest wystarczająco długie (np. ma co najmniej siedem znaków) i dodać to do listy wyników (.ToString()!); potem wyczyścić go, a jeśli ostatni znak był kropką, to ignorować wszystko aż do napotkania czegoś innego niż liczba.

0

Chyba nie rozumiem relacji tych danych.

Generalne uwagi: nie ma jakiś magicznych sposobów na pliki tekstowe - nie są to bazy danych.
Przeczytać tzreba cały, zbudować jakaś strukturę danych (klasy / słowniki / listy), i w niej szukać już bez I/O.
Jak znasz dziedzinę problemu - a my nie znamy - to zbudujesz klasy odpowiadające tym danym.

Oceniasz liczby czy są duże ... to chyba błąd, nie traktuj jako integery, przetwarzać chyba tzreba jako stringi - chyba, ze wiesz coś,czego ja nie wiem.

0

Tak. Na początek mogę podzielić tekst na dwie porcje, te przed znakiem '[' i druga porcja po znaku '['.
Następnie wyodrębnię z obu porcji dwie tablice z liczbami wyszukanymi proponowanymi sposobami. Sprawdzę stoperem czas wykonywania.
Dzięki.

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