pomoc w edycji pliku .txt

2013-06-26 21:42

Rejestracja: 6 lat temu

Ostatnio: 6 lat temu

0

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-10:08:49 1524.26 0.20 100.00 20.00 40.00 35.00 379260
277 60- 7- 7 S PL-0277-10-1229 1 1-10:03:00 1518.15 0.41 99.90 20.00 39.99 34.99 368910
277 64-15- 7 S PL-0277-10-2722 0 1- 9:57:42 1515.44 0.61 99.80 34.99 360220
277 78-21- 7 - PL-0277-07-4469 0 1-10:06:20 1496.59 0.82 99.69 19.99 39.98 34.98 368660
227 54- 5- 5 S PL0227-12-10843 0 1- 9:58:54 1492.26 1.02 99.59 34.97 356500
277 49-13- 7 S PL-0277-08-5048 0 1-10:05:10 1492.05 1.23 99.49 19.98 39.96 34.96 365800
227 94-34- 7 - PL0227-10-10175 0 1-10:02:14 1489.18 1.43 99.39 19.98 39.95 34.96 360730
277 37- 9- 7 S PL-0224-09-7794 0 1-10:14:21 1489.13 1.64 99.28 19.97 39.94 34.95 378760
277 57-28- 7 S PL-0277-09-1631 1 1-10:05:41 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-10:08:49 1524.26 0.20 100.00 20.00 40.00 35.00 379260
277 60- 7- 7 S xx-xxx-xx-xxxx 1 1-10:03:00 1518.15 0.41 99.90 20.00 39.99 34.99 368910
277 64-15- 7 S xx-xxx-xx-xxxx 0 1- 9:57:42 1515.44 0.61 99.80 34.99 360220
277 78-21- 7 - xx-xxx-xx-xxxx 0 1-10:06:20 1496.59 0.82 99.69 19.99 39.98 34.98 368660
227 54- 5- 5 S xx-xxx-xx-xxxx 0 1- 9:58:54 1492.26 1.02 99.59 34.97 356500
277 49-13- 7 S xx-xxx-xx-xxxx 0 1-10:05:10 1492.05 1.23 99.49 19.98 39.96 34.96 365800
227 94-34- 7 - xx-xxx-xx-xxxx 0 1-10:02:14 1489.18 1.43 99.39 19.98 39.95 34.96 360730
277 37- 9- 7 S xx-xxx-xx-xxxx 0 1-10:14:21 1489.13 1.64 99.28 19.97 39.94 34.95 378760
277 57-28- 7 S xx-xxx-xx-xxxx 1 1-10:05:41 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

edytowany 1x, ostatnio: olesio, 2013-06-26 22:37

Pozostało 580 znaków

2013-06-26 21:47

Rejestracja: 7 lat temu

Ostatnio: 2 lata temu

Lokalizacja: Wrocław

0

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

edytowany 2x, ostatnio: Zellus, 2013-06-26 21:49

Pozostało 580 znaków

2013-06-26 21:49
Moderator

Rejestracja: 11 lat temu

Ostatnio: 1 dzień temu

Lokalizacja: Szczecin

0

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).


edytowany 3x, ostatnio: olesio, 2013-06-26 21:52

Pozostało 580 znaków

2013-06-26 21:52

Rejestracja: 8 lat temu

Ostatnio: 8 godzin temu

0

tak jest to możliwe w każdym języku programowania. Nie jest to trudne wystarczy

  1. Otworzyć dany plik do edycji
  2. Pobrać całą linie tekstu (w c++ np getline())
  3. znaleźć w tej linii znak P. i zamienić 14 znaków na xx-xxx-xx-xxxx wraz z P
  4. Dodać zmieniony string do jakieś struktury (np vector)
  5. powtarzać kroki 3 oraz 4 aż do końca pliku
  6. zamknąć plik
  7. otworzyć plik nowy (żeby było łatwiej, inaczej będzie trzeba stamtad wszystko usunąć, też nie jest trudne, ale moim zdaniem to łatwiejsze)
  8. 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ć.

edytowany 1x, ostatnio: fasadin, 2013-06-26 21:55
Szukanie s'ki wysypie się np. przy czwartek linijce (gdzie s zastąpione jest -) - Zellus 2013-06-26 21:54
masz racje, wystarczy szukać pierwsze P w takim razie - fasadin 2013-06-26 21:55

Pozostało 580 znaków

2013-06-26 23:46

Rejestracja: 15 lat temu

Ostatnio: 1 dzień temu

0

Ja użyłbym do tego mojego ulubionego edytora Notepad++ oraz:

  1. włączył nagrywanie makra
  2. CTRL+F wyszukałbym frazy "PL-"
  3. Shift + stralka w prawo (tak aby zaznaczyc caly numer)
  4. Delete
  5. Wpisanie xx-xxx-xx-xxxx
  6. wyłączenie nagrywania makra
    i gotowe :P

Pozostało 580 znaków

2013-06-27 00:46

Rejestracja: 7 lat temu

Ostatnio: 1 dzień temu

0
#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;
}

http://ideone.com/MvP9JY

Pozostało 580 znaków

2013-06-27 03:09

Rejestracja: 9 lat temu

Ostatnio: 4 lata temu

2

notepad++

ctrl+h
szukany tekst: PL-?[0-9-]+
zamień na: xx-xxx-xx-xxxx
tryb szukania: wyrażenie regularne
zamień wszystkie


Pół giga extra na dropboxie? Pół giga extra na dropboxie! Tyle wygrać! >>Klik here<<

Pozostało 580 znaków

2013-06-27 07:54

Rejestracja: 6 lat temu

Ostatnio: 6 lat temu

0

dzięki Panowie jesteście super spróbuje coś z tego zrobić

Chociaż jeden naprawdę zadowolny... Świętujmy! - furious programming 2013-06-27 13:50

Pozostało 580 znaków

2013-06-30 10:08

Rejestracja: 6 lat temu

Ostatnio: 6 lat temu

0

kolego unikalna_nazwaskorzystałem z twojego pomysłu na edycję tego pliku tylko mam taką takie pytanko jak znaleśc 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

Poszukaj informacji o wyrażeniach regularnych - szopenfx 2013-06-30 17:46

Pozostało 580 znaków

asdasdasdasd
2013-06-30 10:45
asdasdasdasd
0

PL-?(\s\d+)-(\s\d+)-(\s*\d+)

Pozostało 580 znaków

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