Jak to zrobic? konwersja stringa

0

Hej,

walczę ostatnio z pewnym problemem i zapewne jest to wynikiem mojego braku wiedzy w temacie. mianowicie mam program, który każdego dnia w wyznaczonym okresie, oblicza wartości dla pewnego zdarzenia

ostatecznie uzyskuje coś takiego ( przykład nie pochodzi z programu)

 
List<string> Test = new List<string>();
            Test.Add("2011-10-30 S11  3000");
            Test.Add("2011-10-31 S11 3000");
            Test.Add("2011-11-01 S11 3000");
            Test.Add("2011-11-01 S12 4000");
            Test.Add("2011-11-02 S11 3000");
            Test.Add("2011-11-02 S12 4000");
            Test.Add("2011-11-02 S13 5000");

tak wyglądają moje stringi, chciałbym to w jakiś elegancki sposób przenieść do excela tak żeby uzyskać

  • pionowo w dół daty
  • poziomo "S11" "S12"
  • macierz wypełniona wartościami

moje pytanie dotyczy sposobu rozkładu takiego stringa tak żeby zachować prawidłowość a nie dublować wpisów (dat)

Chyba, że ma ktoś pomysł jak to inaczej zapisać zeby potem było dobrze wyciągać

0

drukuj z jakimś separatorem, np. tabem albo średnikiem:
"2011-10-30;S11;3000"
chociaż spacja też może być, jeśli nie występuje wewnątrz wartości. taki plik można bezpośrednio zaimportować w excelu.
a może chcesz z poziomu programu zapisać do xls? nie wyraziłeś się jasno…

0

dokładnie to wygląda tak "2011-11-01\rS12\r 4000" potem używam Regex.Split, Export do excela tez już mam

Pytanie dotyczy jak to przenieść żeby daty się nie powtarzały albo te drugie wartości tzn S12

chciałbym żeby wyglądało to tak

                     S11             S12              S13
2011-10-10
2011-10-11
2011-10-12

 

a nie tak

                     S11             S11              S12
2011-10-10
2011-10-11
2011-10-11

 
0

Rozwiązanie jest proste:

  1. Tworzysz mapę, której kluczem są daty a wartościami są mapy
  2. te "wewnętrzne" mapy są kluczowane po stringach (s11, s12, itp.) a ich wartościami są "wartości" (czyli np "4000").

Innymi słowy (pisząc javowo):
Map<Date, Map<String, String>>
albo
Map<Date, Map<String, Integer>>

0

Tylko nie znam odpowiednika javowej mapy / chyba ze można by zrobić Dictionary<date,Dictionary<string,string>> ?

[losowa nazwa] napisał(a)

Rozwiązanie jest proste:

  1. Tworzysz mapę, której kluczem są daty a wartościami są mapy
  2. te "wewnętrzne" mapy są kluczowane po stringach (s11, s12, itp.) a ich wartościami są "wartości" (czyli np "4000").

Innymi słowy (pisząc javowo):
Map<Date, Map<String, String>>
albo
Map<Date, Map<String, Integer>>

0

Niestety tak nie idzie tego zrobić, czy ktoś pomoże?

0

mój pseudocode dla tego problemu, pomysł dokładnie ten sam co kolegi powyżej:

List<String> plainList; //tutaj Twoja lista brzydkich stringow
Dictionary<String, Dictionary<String,String>> dict;=new...;


foreach(String str in plainList)
{
   String[] parts = str.split(" ");
   
   if(!dict.hasKey(str[0]))
      dict.Add(str[0],new Dictionary<String,String>();
  
   dict[str[0]].Add(str[1],str[2]);
   
}

dzięki temu masz hierarhię:
Data1:
S11 - 1000
S12 - 2000
S23 - 3000

Data2:
S11 - 1000
S12 - 2000
S23 - 3000

teraz prosta iteracja po tych słownikach i zapis do excela. To już chyba nie problem?

0

Dzięki Mrozu :)

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