Zadanie ze zagregowaniem plików

0

Witam, mam problem z zareagowaniem plików json niżej treść

"Zagreguj (opcjonalnie – z wykorzystaniem wielu wątków) uzyskane dane
pomiarowe do jednego pliku sesji zachowując prawidłowy format JSON.
Wykorzystaj mechanizmy wpierające format transferowania danych [2].
nazwa_programu.exe -liczba_watkow 10 -fz folder_zrodlowy_pliki_json

  • nazwa plik_docelowy.json
    Przykładowy wynik agregacji pomiarów skalarnych. Dane źródłowe: próbka
    pierwsza [1,2,0], próbka druga [0,1,2], próbka trzecia [3,3,3]. Wynik
    1,2,0],[0,1,2],[3,3,3."

https://msdn.microsoft.com/pl-pl/library/cc197957 ---> to mam niby wykorzystać

mógłby ktoś pomódz nie wiem jak się za to zbarać proszę o pomoc

0
  1. Utwórz projekt w VS
  2. Obrób dane z argumentów lini poleceń
    3.Jeżeli możesz użyj http://www.newtonsoft.com/json do konwersji na json, jeżeli nie napisz parser
    4.Zapisz do pliku
0

No dobra a o co chodzi z ta klasa json? Jak dxiala ten parser jak go użyć

0

Kto jests w stanie szybko pomodz pisac na pw mam malo czasu na to zadanir

0

Przecież w tym linku, który wkleiłeś masz pokazane jak z tego korzystać.

0

Może i jest tam opisane ale nie rozumie jak to powinło być zrobione, nie siedzę w c# a mam tylko to do wykonania, pliki json sa pobierane przez inny program i co mam jakoś odwłać się do tego pliku czy jak? Jak mam zapisać rozumie ze próbki to pliki czyli przezucić wszystko do jednego dużego pliku a póxniej na nim pracować? Musze korzystać z tego parsera?
Wykładowca mial to gdzieś i nic nie powiedział

0

masz dwie opcje

  1. albo przestac narzekac i po prostu douczyc sie
  2. albo zaplacic by ktos to zrobil za Ciebie

poki co to ja widze, ze chcesz skorzystac z opcji 2) Jezeli sie myle to przestan miec wyrzuty i poczytaj co jest w tym linku (bo tam jest wszystko co Ci potrzebne)

ewentualnie jakbys nie potrafil googlowac/przeszukac ich strony
https://www.google.nl/search?q=newtonsoft+json+example&oq=newtonsoft+json+example&aqs=chrome..69i57.4191j0j1&sourceid=chrome&ie=UTF-8
http://www.newtonsoft.com/json/help/html/ReadJsonWithJsonTextReader.htm

to prosze zrobilem to za Ciebie

0

Tak w telegraficznym skrócie, bez zabawy w json, który pasuje tutaj jak pięść do twarzy, bo wystarczy zwykła konkatenacja stringów

			var filesToProcess = new List<string> { "1.json", "2.json", "3.json" };
			var data = new Dictionary<string, string>() { { filesToProcess[0], "[1,2,3]" }, { filesToProcess[1], "[3,4,5]" }, { filesToProcess[2], "[5,6,7]" } };

			var result = filesToProcess
				.Select(f => data[f].Trim()) // symulowany odczyt z pliku
				.Aggregate((existingData, newData) => string.Format("{0},{1}", existingData, newData));
		
			Console.WriteLine("[" + result + "]");
0
ŁF napisał(a):

Tak w telegraficznym skrócie, bez zabawy w json, który pasuje tutaj jak pięść do twarzy, bo wystarczy zwykły split i int.Parse:

			var data = "[1,2,3][4,5,6]";
			var result = new List<int>() { 0, 0, 0 };

			data
				.Split(new[] { ']', '[' }, StringSplitOptions.RemoveEmptyEntries)
				.Select(row => row.Split(',').Select(int.Parse))
				.ToList()
				.ForEach(row => {
					var i = 0;
					row.ToList().ForEach(item => result[i++] += item);
				});

			result.ForEach(r => Console.Write("{0} ", r));
			Console.WriteLine();

Jeśli zaś ilość kolumn jest stała, to pewnie dałoby się to zrobić jeszcze krócej, ale już nie mam czasu nad tym myśleć.

Tylko ze muszę uzyć json poniewaz pobieram pliki z serwera własnie w tym formacie i mam je zreagować do jednego dużego pliku w foramcie json

0

Nie mam już na to siły i czasu. Ktoś chętny do napisania końcówki programu?

0

Poprawiłem swoje wypociny, ubierz je w obsługę argumentów wywołania, odczytywanie plików, zapis wyjścia do pliku i już. Look ma', no json.

0

Fajnie cos działa. A takie pytanie, zakładam ze nie wiem ile bede miał plików json nazwy przykładowo od 1.json do n.json ( w ciagu tam 60 sekund tworzą się pliki) to aby edtować kod powinłem zrobić to petlą czy tablice z wcześniej stworzonymi parametrami wstawic?? Teraz generalnie program mam na sztywno a gdybym chciał zrobic to dynamiczne??

Druga sprawa w dalszej części chce otworzyć plik złączony i wyszukać np wszystkie wektory dla jednego id. Jak powinło wyglądać takie odwołanie?

0

Hej, pytasz o podstawy. Jak wylistować pliki w katalogu znajdziesz na google. Nie możesz założyć, że lista będzie stała. Jak odczytać zawartość pliku tekstowego również tam znajdziesz. Nie rozumiem stwierdzenia "edytować kod" w kontekście użycia pętli albo tablicy. Usiądź z kartką, zastanów się co chcesz osiągnąć, narysuj to i spróbuj zaimplementować. Dlaczego? Bo teraz zadajesz bardzo proste pytania o architekturę swojego kodu - a wystarczyłoby chwilę pomyśleć :-)

0

OK Wielkie dzieięki za pomoc

0

var filesToProcess = new List<string> { "1.json", "2.json", "3.json" };
var data = new Dictionary<string, string>() { { filesToProcess[0], "[1,2,3]" }, { filesToProcess[1], "[3,4,5]" }, { filesToProcess[2], "[5,6,7]" } };

Zamiast plików "1.json" ... powinłem wstawić liste z tymi plikami?? W linijce niżej tez za pomocą listy??

0

To nie pliki, a nazwy plików. Jeśli nie zbudujesz tej listy dynamicznie, to skąd będziesz wiedział, jakie pliki trzeba przeprocesować?

0

Tak nazwy plków sorki zle napiałem, nom mam liste dodaje tyle ile plików jest stworzonych tylko zastanawiam się czy z tą drugą liną tak samo jak jest filesToProcess[0], " 1,2" - tu lista dwa parametry powniła też mieć

0

Widzę, że masz deficyt kartek:

  1. Pobierz listę plików w katalogu o ścieżce podanej w argumencie wywołania programu
  2. Dla każdego pliku:
    2a. Wczytaj jego zawartość
    2b. Doklej tę zawartość do zmiennej (zdefiniowanej i zainicjowanej przed pętlą) odpowiednio formatując (czyli dodając jeszcze przecinek)
  3. Wypluj sformatowaną zawartość zmiennej (sformatowaną, czyli z [ na początku i ] na końcu) do pliku o nazwie podanej w argumencie wywołania programu

Dokładnie taki algorytm masz zaimplementowany przeze mnie w linq (tylko lista plików i ich zawartości są "udawane"), ale równie dobrze możesz go zrobić w zwykłej pętli.

0

Tej drugiej listy nie tworzysz. Treść pliku wczytujesz w środku pętli.

0

W tych swoich plikach to masz w ogóle dane w postaci [1,2,3], 1,2,3 czy w końcu dane w formacie JSON?

0

Wszystko od początku w formacie JSON

0

nie mam pojęcia juz jak z ta petlą, zniby jest ta lista ale gdzie tą petla wrzucać to nie wiem. Dzięku za pomoc w powyższych postach

0

Wersja dla kumatych:

		static void Main(string[] args)
		{
			var filesToProcess = Directory.EnumerateFiles(@"c:\temp\in", "*.json"); // tu sobie dodaj użycie odpowiedniego parametru z args

			var result = filesToProcess.Any() ? 
				filesToProcess.Select(File.ReadAllText).Select(data => data.Trim()).Aggregate((existingData, newData) => string.Format("{0},{1}", existingData, newData)) 
				: string.Empty;

			File.WriteAllText(@"c:\temp\out", "[" + result + "]"); // tu sobie dodaj użycie odpowiedniego parametru z args
		}

Wersja dla kumatych inaczej:

		static void Main(string[] args)
		{
			var filesToProcess = Directory.EnumerateFiles(@"c:\temp\in", "*.json"); // tu sobie dodaj użycie odpowiedniego parametru z args
			var output = new StringBuilder("[");

			foreach (var fileToProcess in filesToProcess)
			{
				var fileContents = File.ReadAllText(fileToProcess).Trim();
				output.Append(fileContents + ",");
			}

			output.Append("]");

			File.WriteAllText(@"c:\temp\out", output.ToString()); // tu sobie dodaj użycie odpowiedniego parametru z args
		}

A że nie będę odwalać całej pracy za Ciebie to pogimnastykuj się z parsowaniem przychodzących argumentów. Kod pisany z palca, może działać odrobinę inaczej niż mi się wydaje.

0

string[] filePaths = Directory.GetFiles(@"C:\SOiAK\pliki"); Czy jest określona jakaś maksymalna liczba plików??? bo po 10 nie zwieksza sie

0

Coś popsułeś.

0

Chyba mam błąd z tablicą, powiłem ja posortować bo widzę ze pliki nie sa po kolei zapisane

Array.Sort(nazwatablicy); to posoruje tablice stringów ?

0

Pobieram nazwy plików zapsije do tablicy
string[] filePaths = Directory.GetFiles...

Jak to posortować lub znaleŹć największy numer w nazwie

0

Człowieku, zacznij wreszcie samodzielnie zdobywać informacje, bo jak na razie to piszemy linijka po linijce za Ciebie.
Sortowanie - Array.Sort albo IEnumerable<T>.OrderBy(...). Jeśli chcesz mieć sortowanie naturalne (doczytaj sobie w internecie co to jest), to musisz się trochę bardziej pogimnastykować, da się to zrobić w jednej linijce choć nie będzie trywialne, ale sam wymyśl jak to zrobić - o ile będziesz tego typu sortowania potrzebować.

0

Jak masz problem to po prostu nie odpisuj

0
ŁF napisał(a):

Człowieku, zacznij wreszcie samodzielnie zdobywać informacje, bo jak na razie to piszemy linijka po linijce za Ciebie.
Sortowanie - Array.Sort albo IEnumerable<T>.OrderBy(...). Jeśli chcesz mieć sortowanie naturalne (doczytaj sobie w internecie co to jest), to musisz się trochę bardziej pogimnastykować, da się to zrobić w jednej linijce choć nie będzie trywialne, ale sam wymyśl jak to zrobić - o ile będziesz tego typu sortowania potrzebować.

Zrobiłem inaczej poprzez wyszukanie nazwy z maksymalnym indeksem.

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