odzielanie danych

0

mam tego typu dane:
Elapsed time ECG
(seconds) (mV)
20.000 0.169
20.001 0.177
20.003 0.177
20.004 0.169
20.006 0.177
20.007 0.177

chciałabym żeby te 2 pierwsze linijki zostały usunięte, i żeby pierwsza kolumna weszła do jednej tablicy, a 2 do drugiej. Dopiero się uczę więc proszę o wyrozumiałość

0

i? co więcej?

0

chcę rozdzielić dane z pliku żeby je wrzucić do bazy danych do 2 kolumn czasu i amplitudy, żeby później zrobić tego wykres w kolejnej aplikacji.

0

Chyba raka prostaty dostanę :)
przecież masz strukturę 1:1 - czego chcesz?

0

nie no już nic lepiej żebym nie miała na sumieniu twojego zdrowia

0

to nie moje zdrowie, tylko twoje :)

0

No ze string`iem, który wrzuciłaś można to zrobić na tej zasadzie - łopatologicznie

StreamReader plikTekstowy = new StreamReader(@"c:\test\test.txt");
string linia = "";
				
while((linia = plikTekstowy.ReadLine())!= null)
{
if(linia.Contains("Elapsed") == false && linia.Contains("seconds") == false) //wykluczasz dwie pierwsze linie
{
string[] slowaLinia = linia.Split();
foreach (string slowo in slowaLinia)
{
//tutaj wykonujesz metodę dla każdego słowa w lini - np. wrzucenie do bazy
if(slowo.StartsWith("2"))
{
MessageBox.Show(slowo); //wyrzuca Ci dane z linia które zaczynają się z liczbą 2
}
if(slowo.StartsWith("0"))
{
MessageBox.Show(slowo); //wyrzuca Ci dane z linia które zaczynają się z liczbą 2
}
}
}
}

jeśli dane są regularnie poukładane w string`u, to zamiast "MessageBox.Show(slowo);" możesz użyć "MessageBox.Show(slowaLinia[1]);" gdzie 1 to przykładowy indeks "wyrazu".

0

ja czytam z portów com dane:
public void comPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
switch (CurrentTransmissionType)
{
case TransmissionType.Hex:
int bytes = comPort.BytesToRead;
byte[] comBuffer = new byte[bytes];
comPort.Read(comBuffer, 0, bytes);
DisplayData(MessageType.Incoming, ByteToHex(comBuffer) + "\n");
break;
default:
this.str = comPort.ReadExisting();
DisplayData(MessageType.Incoming, this.str + "\n");

i teraz pytanie czy ja moge użyć readLine?

po prostu źle się wyraziłam te dane wyglądają tak w pliku który następnie przesyłam przez rs232 , niestety nie może być tak że zaczyna się od 0 lub 2 bo to są sygnały EKG i ten czas może być zupełnie inny, namieszałam strasznie bo nawet nie jest to wyświetlane w taki sam sposób jak w pliku tylko ciągiem w taki sposób: 20.000\t 0.169 20.001\t 0.177 20.003\t

0

Zamień co drugi odstęp na znak nowej lini i tyle;
Jak jesteś leniwa to wyszukaj jak się woła Split w string'u;

0

No w takim przypadku ReadLine się nie przyda...

Nie przechwytywałem jeszcze danych z RS, ale z tego co piszesz wnioskuję, że każdy str to: "XX.XXX\t X.XXX" (między wyrażeniami dwie spacje)

W takim przypadku spróbuj:

string str = "30.000\t  0.169";
string strGotowy = str.Replace("\t ", null); \\jeśli między wyrażeniami jest jedna spacja to dajesz "\t"
string[] words = strGotowy.Split();

MessageBox.Show(words[0]); //albo np. wpisanie words[0] do kolumny pierwszej w bazie
MessageBox.Show(words[1]); //albo np. wpisanie words[1] do kolumny drugiej w bazie

...jeśli otrzymany str to coś innego niż "XX.XXX\t X.XXX" to Replaceuj wszystko tak, aby strGotowy wyglądał tak: "XX.XXX X.XXX", wtedy wszystko ładnie się podzieli i pierwsze wyrażenie będziesz pobierała jako words[0] a drugie jako words[1] i będziesz mogła z tym robić co Ci się podoba. Odnośnie tych dwóch pierwszych linijek to też możesz wykorzystać Replace zastępując je nullem.

Jeśli dane dostajesz dokładnie tak jak napisałaś ("20.000\t 0.169 20.001\t 0.177 20.003\t"), to wykorzystaj jeszcze words[2] i words[3].

...a jeśli dostajesz dane tak: "20.000\t 0.169 20.001\t 0.177 20.003\t 20.000\t 0.169 20.001\t 0.177 20.003\t ... i nie wiadomo ile jeszcze danych dostanę", to będziesz mogła wykorzystać modulo indeksu (if index słowa mod 2 == 0 to wrzucam do kolumny pierwszej, else do drugiej), ale to Ci rozpiszę jeśli potwierdzisz, że dane dostajesz właśnie w ten sposób :).

0

str = "lapsed time\t ECG (seconds)\t (mV) 20.000\t 0.169 20.001\t 0.177 20.003\t 0.177 20.004\t 0.169 20.006\t 0.177 20.007\t 0.177 20.008\t 0.169 20.010\t 0.169 20.011\t 0... - w takiej postaci jest to w tym stringu

0

No zamień odstęp z \t na tabulator ( odstęp pomiędzy kolumnami ) a na początek tego ciągu spacji dostrzel entera i wyjdzie Ci ta tabelka.
Co i jak już Ci podali inni forumowicze.

0

No to jeszcze inaczej...

string str = "elapsed time\t    ECG      (seconds)\t   (mV)         20.000\t  0.169         20.001\t  0.177         20.003\t  0.177         20.004\t  0.169         20.006\t  0.177         20.007\t  0.177         20.008\t  0.169         20.010\t  0.169";
string strGotowy = str.Replace("elapsed time\t    ECG      (seconds)\t   (mV)         ", null).Replace("         ", "\n").Replace("\t  ", " "); //jeśli w string`u znajdują się jeszcze jakieś elementy, które chcesz wyrzucić to zrób to dodając kolejny .Replace("to co wyrzucam", null)

MessageBox.Show(strGotowy); //tu wyskoczą Ci dane w postaci dwóch kolumn

string[] strLinie = strGotowy.Split('\n');

foreach(string linia in strLinie)
{
if(linia != null)
{
string[] slowa = linia.Split();
MessageBox.Show(slowa[0]);
MessageBox.Show(slowa[1]);
}
}
0

dziękuje bardzo za pomoc:)

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