Koledzy nie mam pojęcia o programowaniu ale chciałbym sobie edytowac plik txt. Podam może przykład:
Mam coś takiego:
277 47-25- 7 S PL-0198-12-3194 1 1-1049 1524.26 0.20 100.00 20.00 40.00 35.00 379260
277 60- 7- 7 S PL-0277-10-1229 1 1-1000 1518.15 0.41 99.90 20.00 39.99 34.99 368910
277 64-15- 7 S PL-0277-10-2722 0 1- 942 1515.44 0.61 99.80 34.99 360220
277 78-21- 7 - PL-0277-07-4469 0 1-1020 1496.59 0.82 99.69 19.99 39.98 34.98 368660
227 54- 5- 5 S PL0227-12-10843 0 1- 954 1492.26 1.02 99.59 34.97 356500
277 49-13- 7 S PL-0277-08-5048 0 1-1010 1492.05 1.23 99.49 19.98 39.96 34.96 365800
227 94-34- 7 - PL0227-10-10175 0 1-1014 1489.18 1.43 99.39 19.98 39.95 34.96 360730
277 37- 9- 7 S PL-0224-09-7794 0 1-1021 1489.13 1.64 99.28 19.97 39.94 34.95 378760
277 57-28- 7 S PL-0277-09-1631 1 1-1041 1489.03 1.84 99.18 19.97 39.93 34.94 365830
itd..........
a potrzebuje żeby mi się to zmieniło na:
277 47-25- 7 S xx-xxx-xx-xxxx 1 1-1049 1524.26 0.20 100.00 20.00 40.00 35.00 379260
277 60- 7- 7 S xx-xxx-xx-xxxx 1 1-1000 1518.15 0.41 99.90 20.00 39.99 34.99 368910
277 64-15- 7 S xx-xxx-xx-xxxx 0 1- 942 1515.44 0.61 99.80 34.99 360220
277 78-21- 7 - xx-xxx-xx-xxxx 0 1-1020 1496.59 0.82 99.69 19.99 39.98 34.98 368660
227 54- 5- 5 S xx-xxx-xx-xxxx 0 1- 954 1492.26 1.02 99.59 34.97 356500
277 49-13- 7 S xx-xxx-xx-xxxx 0 1-1010 1492.05 1.23 99.49 19.98 39.96 34.96 365800
227 94-34- 7 - xx-xxx-xx-xxxx 0 1-1014 1489.18 1.43 99.39 19.98 39.95 34.96 360730
277 37- 9- 7 S xx-xxx-xx-xxxx 0 1-1021 1489.13 1.64 99.28 19.97 39.94 34.95 378760
277 57-28- 7 S xx-xxx-xx-xxxx 1 1-1041 1489.03 1.84 99.18 19.97 39.93 34.94 365830
Czy jest to możliwe? Z góry dziękuję za pomoc i dobre rady
Wszystko jest możliwe, kwestia tylko ile czasu to zajmie :]
To akurat jest całkiem proste, np. w c++. Wczytujesz po kolei całe linijki, jak napotkasz 2 znaki PL to każdy znak(za wyjatkiem -) na x aż do napotkania znaku białego
http://www.cplusplus.com/reference/fstream/fstream/
niby nie poleca się wczytywania całej linijki od razu ale myślę że tutaj będzie to i tak całkiem dobre rozwiązanie, bo nie wszystkie dane są Ci tu do czegoś przydatne
Najprościej dla mnie - było by to napisać w Delphi z użyciem modułu TRegExpr
do wyrażeń regularnych - dostępnego na: http://regexpstudio.com/TRegExpr/TRegExpr.html . Ale koniecznie musisz mieć to napisane od zera? Bo jeżeli nie, to może użyj jakichś gotowych programów, choćby Replacem
(dostępny na: http://www.orbit.org/replace).
tak jest to możliwe w każdym języku programowania. Nie jest to trudne wystarczy
- Otworzyć dany plik do edycji
- Pobrać całą linie tekstu (w c++ np getline())
- znaleźć w tej linii znak P. i zamienić 14 znaków na xx-xxx-xx-xxxx wraz z P
- Dodać zmieniony string do jakieś struktury (np vector)
- powtarzać kroki 3 oraz 4 aż do końca pliku
- zamknąć plik
- otworzyć plik nowy (żeby było łatwiej, inaczej będzie trzeba stamtad wszystko usunąć, też nie jest trudne, ale moim zdaniem to łatwiejsze)
- zapisać to co jest w strukturze do nowego pliku
To jest przykładowy algorytm który mi na daną chwilę przyszedł do głowy. na 100% da się to zrobić szybciej (w mniejszej ilości kroków) ale ja myślałem bardziej o to by dało się go prosto napisać.
Ja użyłbym do tego mojego ulubionego edytora Notepad++ oraz:
- włączył nagrywanie makra
- CTRL+F wyszukałbym frazy "PL-"
- Shift + stralka w prawo (tak aby zaznaczyc caly numer)
- Delete
- Wpisanie xx-xxx-xx-xxxx
- wyłączenie nagrywania makra
i gotowe :P
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
#include <iterator>
using namespace std;
int main() {
string rpl("xx-xxx-xx-xxxx");
vector<string> cnt;
string tmp;
while(getline(cin, tmp)) {
cnt.push_back(tmp);
}
size_t ind;
for(string& el : cnt) {
if((ind = el.find("PL")) == string::npos) {
continue;
}
el.replace(ind, rpl.size(), rpl);
el.erase(ind + rpl.size(), 1);
}
copy(
cnt.begin(),
cnt.end(),
ostream_iterator<string>(cout, "\n")
);
return 0;
}
notepad++
ctrl+h
szukany tekst: PL-?[0-9-]+
zamień na: xx-xxx-xx-xxxx
tryb szukania: wyrażenie regularne
zamień wszystkie
dzięki Panowie jesteście super spróbuje coś z tego zrobić
kolego unikalna_nazwaskorzystałem z twojego pomysłu na edycję tego pliku tylko mam taką takie pytanko jak znaleŹć taki numer :
PL-0277-12- 48(tu zaznacza mi tylko tą częśc Pl-0277-12-) a 48 zostaje
bo np. taki szuka ok
PL-0277-12-1248
PL-?(\s*\d+)-(\s*\d+)-(\s*\d+)