Witam,potrzebuje pomocy w rozbiciu ciągu znaków ze stringa który posiada ponad 800 znaków do tablicy po 4 znaki .Jest ni to potrzebne w ulepszeniu swojego małego programiku który ułatwia mi prace.Za wszystkie podpowiedzi z góry dziękuje
String to łańcuch znaków więc proponuję zrobić zwykłą pętle for, gdzie zwiększasz iteracje co 4, a w środku odnosisz się do string[i], string[i+1], string[i+2], string[i+3].
Witam,
Jestem totalnym laikiem, namazałem coś takiego.
Zakładając, że na ostatniej pozycji może być string o długości mniejszej niż 4:
string arg = "adjndjfnksjdnfkjsndkjnfeworijwonsdjfnsjdfknsdkjfnksdjnfkjdsnkfjnksjdnkfnksjdkfjnsdkjfnksjdf";
string[] tab = new string[(arg.Length % 4 == 0) ? arg.Length/4 : arg.Length/4 + 1];
for (int i = 0; i < tab.Length; i++)
{
if (arg.Length > 4)
{
tab[i] = arg.Substring(0, 4);
arg = arg.Remove(0, 4);
}
else
{
tab[i] = arg.Substring(0, arg.Length);
arg = arg.Remove(0, arg.Length);
}
}
string[] Split(string str, int chunkSize)
{
return Enumerable.Range(0, str.Length / chunkSize)
.Select(i => str.Substring(i * chunkSize, chunkSize)).ToArray();
}
dlaFrajdy napisał(a):
Witam,
Jestem totalnym laikiem, namazałem coś takiego.
Zakładając, że na ostatniej pozycji może być string o długości mniejszej niż 4:string arg = "adjndjfnksjdnfkjsndkjnfeworijwonsdjfnsjdfknsdkjfnksdjnfkjdsnkfjnksjdnkfnksjdkfjnsdkjfnksjdf"; string[] tab = new string[(arg.Length % 4 == 0) ? arg.Length/4 : arg.Length/4 + 1]; for (int i = 0; i < tab.Length; i++) { if (arg.Length > 4) { tab[i] = arg.Substring(0, 4); arg = arg.Remove(0, 4); } else { tab[i] = arg.Substring(0, arg.Length); arg = arg.Remove(0, arg.Length); } }
DZIAŁA,zawsze mamy po 4 ,ale dzięki za zrobienie ,jeśli by było inaczej,może to wykorzystam gdzie indziej DZIĘKUJE!
szydlak napisał(a):
string[] Split(string str, int chunkSize) { return Enumerable.Range(0, str.Length / chunkSize) .Select(i => str.Substring(i * chunkSize, chunkSize)).ToArray(); }
Ta solucja na pewno też działa tyle ze mój skill nie potrafi jej zastosować ,ja nie jestem żadnym programistą tylko zwykłym mechanikiem samochodowym , ten mój mini programik pomaga mi pracy nad sterownikami sinika , że dwa razy już zapłaciłem za zrobienie takiego mini programu a dostałem dwa zupełnie nie działające gnioty,więc zabrałem się za robotę sam posiłkując się wami i tym forum.
DZIĘKUJE!
Czy kolego szydlak możesz mi to wyjaśnić jak to ma działać gdy string jest w zmiennej np arg = "adjndjfnksjdnfkjsndkjnfeworijwonsdjfnsjdfknsdkjfnksdjnfkjdsnkfjnksjdnkfnksjdkfjnsdkjfnksjdf"; ???
Jeszcze raz dziękuje wam wszystkim
No wywołujesz metodę: var twojaNowatablica = Split(arg , 4);
Oto moje propozycje rozwiązania za pomocą wyrażeń LINQ. Zamiast stałej wartości 4
możesz użyć zmiennej, której wartość musi być większa niż 0
.
- Mało elegancki zapis, ale bez ponownego wykorzystania wejściowego ciągu znaków wewnątrz wyrażenia.
var output = input.Select((c, i) => (c, i))
.GroupBy(x => x.Item2 / 4)
.Select(x => new string(x.Select(y => y.Item1).ToArray()));
- Wyrażenie podobne do jednego z wcześniej zaproponowanych w tym wątku. Użycie
Math.Min
zapobiega wyrzuceniu wyjątku w przypadku, gdy długość wejściowego ciągu znaków nie jest wielokrotnością4
.
var output = input.Where((c, i) => i % 4 == 0)
.Select((c, i) => input.Substring(4 * i, Math.Min(4, input.Length - 4 * i)));