Forum » Programiranje » [c#] preberi tekst ločen na dele
[c#] preberi tekst ločen na dele
japol ::
Kako preberem tekst iz .txt, ki je ločen z neko besedo?
Imam tekst:
dan:13
mesec:3
leto:2012
izvedba:da
=====
dan:18
mesec:7
leto:2012
izvedba:da
=====
dan:4
mesec:5
leto:2012
izvedba:ne
=====
Vsak tak vnos je ločen z "=====".
Kako preberem prvi del do "=====" ga vstavim v List, nato drugi del spet do "=====" in v novi List, itd... , ponavlja kolikor je bilo narejenih vnosov.
Imam tekst:
dan:13
mesec:3
leto:2012
izvedba:da
=====
dan:18
mesec:7
leto:2012
izvedba:da
=====
dan:4
mesec:5
leto:2012
izvedba:ne
=====
Vsak tak vnos je ločen z "=====".
Kako preberem prvi del do "=====" ga vstavim v List, nato drugi del spet do "=====" in v novi List, itd... , ponavlja kolikor je bilo narejenih vnosov.
overlord_tm ::
beres po vrstico, vsako vstrico sparsas (split po :), vstavis v nek objekt/struct ki drzi en vnos. Ko naletis na vrstico ====, dodas vnos v List in zacnes na novo?
folfy ::
String x=new String(); String pom=new String(); List<String> v=new List<String>(); while(!file.eof) { pom=file.getLine(); if(pom == "=====") { v.add(x); x=new String(); } else { x+=pom } }
Nekaj v tem smislu, verjetno so napake ker sem na hitro nekaj napisav
darkolord ::
Ah ja
ali
var list = tekst.Split("=".ToCharArray(), StringSplitOptions.RemoveEmptyEntries).ToList();
ali
var list = tekst.Split(new string[] {"====="}, StringSplitOptions.None).ToList();
Zgodovina sprememb…
- spremenilo: darkolord ()
japol ::
Kaj pa če imam npr.:
dan:13
mesec:3
leto:2012
izvedba:da
==vmesna==
1
2
3
=====
dan:18
mesec:7
leto:2012
izvedba:da
==vmesna==
8
3
6
=====
dan:4
mesec:5
leto:2012
izvedba:ne
==vmesna==
3
3
5
=====
in vsak ta sklop do znaka ==vmesna== dati v en List, od ==vmesna== do ===== pa v drugi List
dan:13
mesec:3
leto:2012
izvedba:da
==vmesna==
1
2
3
=====
dan:18
mesec:7
leto:2012
izvedba:da
==vmesna==
8
3
6
=====
dan:4
mesec:5
leto:2012
izvedba:ne
==vmesna==
3
3
5
=====
in vsak ta sklop do znaka ==vmesna== dati v en List, od ==vmesna== do ===== pa v drugi List
KrEn1234 ::
Če imaš dve listi, imaš šolski primer za implementacijo Strategy pattern-a. Za vsak naslednji novi "znak" dodaš dodatno vejo v strategijo.
Strategy pattern @ Wikipedia
Strategy pattern @ Wikipedia
Zgodovina sprememb…
- spremenil: KrEn1234 ()
vorantz ::
v vsakem primeru je to čisto enako kot šolski primer razbijanja teksta po presledkih
samo da namesto presledka daš tvoj niz
samo da namesto presledka daš tvoj niz
darkkk ::
Eh bralne sposobnosti mam na psu.
Narediš lahko "dve fazi", najprej splitaš po sklopu "===vmesni===", ter nato po posameznih sklopih vsakega posebej.
Neki v tem stilu (ni pa to najhitrejše, ker greš "3x" čez podatke, 1. ko bereš, 2x ko splittaš), najhitreje je verjetno direkt parsanje z branjem vrstic.
Narediš lahko "dve fazi", najprej splitaš po sklopu "===vmesni===", ter nato po posameznih sklopih vsakega posebej.
string str = ... ; //sem noter prebereš text file; string[] split1 = str.Split("===vmesni==="); List<List<string>> allLists = new List<List<string>>(); //tuki noter boš obesil vsako sekcijo po koščkih. V naprej ne veš kolk jih je. for(int i = 0; i < split1.Length; i++){ allLists.Add(new List<string>(split1[i].Split("====")));//če ne dela direkt v konstruktor je treba dodat range na roke v "podseznam" }
Neki v tem stilu (ni pa to najhitrejše, ker greš "3x" čez podatke, 1. ko bereš, 2x ko splittaš), najhitreje je verjetno direkt parsanje z branjem vrstic.
Zgodovina sprememb…
- spremenil: darkkk ()
japol ::
Na tak način imam že narejeno, ampak to naredi, da prvič v List vstavi do ==vmesna==, se pravi
dan:13
mesec:3
leto:2012
izvedba:da
ampak drugič pa vstavi od ==vmesna== do ==vmesna==, ker s for zanko nadaljuje in vstavi:
1
2
3
=====
dan:18
mesec:7
leto:2012
izvedba:da
itd.
moral bi pa ponovno štartati od =====
string sem prebral po vrsticah z:
StreamReader sr = new StreamReader(openFile1.FileName);
string[] vrste = sr.ReadToEnd().Split('\n');
sedaj pa moram razdliti na dele z ===== in ==vmesna==
dan:13
mesec:3
leto:2012
izvedba:da
ampak drugič pa vstavi od ==vmesna== do ==vmesna==, ker s for zanko nadaljuje in vstavi:
1
2
3
=====
dan:18
mesec:7
leto:2012
izvedba:da
itd.
moral bi pa ponovno štartati od =====
string sem prebral po vrsticah z:
StreamReader sr = new StreamReader(openFile1.FileName);
string[] vrste = sr.ReadToEnd().Split('\n');
sedaj pa moram razdliti na dele z ===== in ==vmesna==
darkkk ::
ok:
1. dej ti pokaži cel file, če nimaš neke pametne strukture, pol ...
2. pač splitaj najprej na "==break==", nato pa vse te dele splitaj na ====, vrži stran kar ne rabiš in zbindaj v list.
1. dej ti pokaži cel file, če nimaš neke pametne strukture, pol ...
2. pač splitaj najprej na "==break==", nato pa vse te dele splitaj na ====, vrži stran kar ne rabiš in zbindaj v list.
vorantz ::
ne...prvo mora po ====== pol pa ==vmesni==
ne vem pa zakaj ta vrstica string[] vrste = sr.ReadToEnd().Split('\n');
prvo split ======= pol split ==vmesni== in pol split newline v list
ne vem pa zakaj ta vrstica string[] vrste = sr.ReadToEnd().Split('\n');
prvo split ======= pol split ==vmesni== in pol split newline v list
japol ::
Vsebina .txt je točno taka kot sem jo objavil.
S tem: string[] vrste = sr.ReadToEnd().Split('\n'); preberem vsako izmed vrstic, ločene so seveda z entrom (naslednjo vrstico).
Sedaj pa bi moral narediti nekako tako da vstavlja vrstice v List dokler ne pride do vrstice ==vmesna==, od ==vmesna== do ===== pa da vstavi v nek drugi List. ko doseže ===== pa ponovi postopek, spet vstavlja v List dokler ne pride do vrstice ==vmesna==,... in to ponavlja kolikor je teh sklopov.
Seveda mora vstavljati v Liste od začetka (od indexa [0] naprej).
Poskušal sem z:
in to vnese pravilno za prvi vnos, to je:
dan:13
mesec:3
leto:2012
izvedba:da
ampak za vsak naslednji vnos (2., 3., 4.,...) pa vnese to:
1
2
3
=====
dan:18
mesec:7
leto:2012
izvedba:da
kar pa ne bo v redu, moral bi ponovno začeti od znaka =====
S tem: string[] vrste = sr.ReadToEnd().Split('\n'); preberem vsako izmed vrstic, ločene so seveda z entrom (naslednjo vrstico).
Sedaj pa bi moral narediti nekako tako da vstavlja vrstice v List dokler ne pride do vrstice ==vmesna==, od ==vmesna== do ===== pa da vstavi v nek drugi List. ko doseže ===== pa ponovi postopek, spet vstavlja v List dokler ne pride do vrstice ==vmesna==,... in to ponavlja kolikor je teh sklopov.
Seveda mora vstavljati v Liste od začetka (od indexa [0] naprej).
Poskušal sem z:
for (int j = 0; j < vrste.Count(); j++) { string posameznavrsta = vrste[j].ToString().Trim('\r'); //.Trim('\r') ker ko prebere vsako vrsto, zraven upošteva še enter (ne vem zakaj) if (f != "==vmesna==") { lista.Add(f.ToString()); } }
in to vnese pravilno za prvi vnos, to je:
dan:13
mesec:3
leto:2012
izvedba:da
ampak za vsak naslednji vnos (2., 3., 4.,...) pa vnese to:
1
2
3
=====
dan:18
mesec:7
leto:2012
izvedba:da
kar pa ne bo v redu, moral bi ponovno začeti od znaka =====
vorantz ::
ne...prvo mora po ====== pol pa ==vmesni==
ne vem pa zakaj ta vrstica string[] vrste = sr.ReadToEnd().Split('\n');
prvo split ======= pol split ==vmesni== in pol split newline v list
string[] split1 = str.Split("======"); string[] split2; foreach žnj in split1{ split2 = žnj.split("==vmesni=="); list1.addrange(split2[0].split("\n").tolist) list2.addrange(split2[1].split("\n").tolist) }
neki tazga
kvazi psevdokoda :P preveri za vse funkcije kako morajo bit pravilno
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [c#] Majhen problemčekOddelek: Programiranje | 997 (805) | darkolord |
» | C# pomoč pri razmišljanjuOddelek: Programiranje | 2292 (1436) | urozz |
» | C# ProgramOddelek: Programiranje | 3095 (2018) | Spura |
» | [VB 2005] branje tekstaOddelek: Programiranje | 1642 (1310) | mNeRo |
» | [Naloga][Visul Basic] Program za izračun dimenzij soda...Oddelek: Programiranje | 1762 (1585) | korenje_ver2 |